X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=32936fba6e44a32134e004ca99923066961f7fe5;hb=1532532dd4d3670d6d55560bbc3cbb0b238f74cd;hp=82a95ce3ac650631139b6b6b0cab623119087564;hpb=1e3ae80924342e436b2100e5631e6fd58d4af79d;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 82a95ce..32936fb 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -134,12 +134,12 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', $G_lng = langtolng($G_lang); $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "3.4.2"; +$G_brisk_version = "3.4.3"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ -$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': versione di test per la nuova gestione dei dati volatili.', +$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': versione di test per la nuova gestione dei dati volatili, rivista gestione del ticker.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ), - 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: test version for the new volatile data management.', + 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: test version for the new volatile data management, ticker management refactored.', 'If you want to subscribe our Mailing List, click it!' ) ); $G_room_help = array( 'it' => ' @@ -393,7 +393,7 @@ class Table { $thiz->player_n = 0; $thiz->auth_only = FALSE; - $thiz->wag_own = NULL; + $thiz->wag_own = -1; $thiz->wag_com = ""; $thiz->wag_tout = 0; @@ -462,11 +462,11 @@ class Table { return ($thiz); } - function wag_set($user, $mesg) + function wag_set($user_idx, $mesg) { log_main("WAG_SET"); - $this->wag_own = $user; + $this->wag_own = $user_idx; $this->wag_com = $mesg; $this->wag_tout = 0; } @@ -476,7 +476,7 @@ class Table { log_main("WAG_RESET"); unset($this->wag_own); - $this->wag_own = NULL; + $this->wag_own = -1; $this->wag_com = ""; $this->wag_tout = $timeout; } @@ -694,8 +694,10 @@ class User { $i_start = (1 > ($from->step - COMM_N) ? 1 : ($from->step - COMM_N)); for ($i = $i_start ; $i < $from->step ; $i++) { - $ii = $i % COMM_N; - $this->comm[$ii] = $from->comm[$ii]; + $ii = $i % COMM_N; + if (isset($from->comm[$ii])) { + $this->comm[$ii] = $from->comm[$ii]; + } } $this->asta_card = $from->asta_card; $this->asta_pnt = $from->asta_pnt; @@ -806,39 +808,46 @@ class User { */ } - function step_set($step) { - $this->step = $step; - - do { - if (validate_sess($this->sess) == FALSE) - break; - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE) - break; - fwrite($fp, pack("LL",$this->step, $this->idx)); - fclose($fp); - - return (TRUE); - } while (0); + function step_set($step) + { + $this->step = $step & 0x7fffffff; + + do { + if (validate_sess($this->sess) == FALSE) + break; + if (file_exists(PROXY_PATH) == FALSE) + mkdir(PROXY_PATH); + if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE) + break; + fwrite($fp, pack("LL",$this->step, $this->idx)); + fclose($fp); - return (FALSE); + log_main("step_set [".$this->sess. "] [".$this->step."]"); + + return (TRUE); + } while (0); + + return (FALSE); } - + function step_inc($delta = 1) { - $this->step += $delta; - - if (validate_sess($this->sess)) { - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - $fp = fopen(PROXY_PATH."/".$this->sess.".step", 'w'); - fwrite($fp, pack("LL", $this->step, $this->idx)); - fclose($fp); - - return (TRUE); - } - - return (FALSE); + $this->step += $delta; + /* modularization because unpack() not manage unsigned 32bit int correctly */ + $this->step &= 0x7fffffff; + + if (validate_sess($this->sess)) { + if (file_exists(PROXY_PATH) == FALSE) + mkdir(PROXY_PATH); + $fp = fopen(PROXY_PATH."/".$this->sess.".step", 'w'); + fwrite($fp, pack("LL", $this->step, $this->idx)); + fclose($fp); + + log_main("step_inc [".$this->sess. "] [".$this->step."]"); + + return (TRUE); + } + + return (FALSE); } function reset() { @@ -862,12 +871,12 @@ class User { // SHSPLIT save and load function for the User class. - function load_data($id) + static function load_data($id, $sess) { - GLOBAL $sess; - // error_log("User::load_data BEGIN", 0); + log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] "); + $doexit = FALSE; do { if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { @@ -886,7 +895,11 @@ class User { if ($shm = shm_attach($tok, $shm_sz)) { $user = @shm_get_var($shm, $tok); - log_only("bri == ".($user == FALSE ? "FALSE" : "TRUE")." bri === ".($user === FALSE ? "FALSE" : "TRUE")." bri isset ".(isset($user) ? "TRUE" : "FALSE")); + if ($sess != FALSE && $user->sess != $sess) { + $doexit = TRUE; + break; + } + log_only("user == ".($user == FALSE ? "FALSE" : "TRUE")." user === ".($user === FALSE ? "FALSE" : "TRUE")." user isset ".(isset($user) ? "TRUE" : "FALSE")); if (isset($user)) log_only("bri count ".count($user)); @@ -894,7 +907,7 @@ class User { log_only("INIT MAIN DATA"); // SHSPLIT FIXME: init_data for User class ?? - $user =& User::create($id, "", ""); + $user = User::create($id, "", ""); if (@shm_put_var($shm, $tok, $user) == FALSE) { log_only("PUT_VAR FALLITA ".strlen(serialize($user))); log_only(serialize($user)); @@ -919,7 +932,7 @@ class User { } - function save_data(&$user, $id) + function save_data($user, $id) { GLOBAL $sess; @@ -938,6 +951,7 @@ class User { // log_only("PUT_VAR DI ".strlen(serialize($user))); if (shm_put_var($shm, $tok, $user) != FALSE) { shm_detach($shm); + log_main("User[".$id."] saved."); return (TRUE); } if (shm_remove($shm) === FALSE) { @@ -955,39 +969,39 @@ class User { } + static function step_get($sess) + { + $fp = FALSE; + do { + if (validate_sess($sess) == FALSE) + break; + + if (file_exists(PROXY_PATH) == FALSE) + mkdir(PROXY_PATH); + if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) + break; + if (($s = fread($fp, 8)) == FALSE) + break; + if (strlen($s) != 8) + break; + $arr = unpack('Ls/Li', $s); + fclose($fp); + + // log_rd2("A0: ".$arr[0]." A1: ".$arr[1]); + return ($arr); + } while (0); + + if ($fp != FALSE) + fclose($fp); + + log_rd2("STEP_GET [".$sess."]: return false "); + + return (FALSE); + } } // end class User -function step_get($sess) { - $fp = FALSE; - do { - if (validate_sess($sess) == FALSE) - break; - - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) - break; - if (($s = fread($fp, 8)) == FALSE) - break; - if (strlen($s) != 8) - break; - $arr = unpack('Ls/Li', $s); - fclose($fp); - - // log_rd2("A0: ".$arr[0]." A1: ".$arr[1]); - return ($arr); - } while (0); - - if ($fp != FALSE) - fclose($fp); - - log_rd2("STEP_GET: return false "); - - return (FALSE); -} - function step_unproxy($sess) { log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step"); if (file_exists(PROXY_PATH) == FALSE) @@ -1001,7 +1015,7 @@ class Room { var $table; var $comm; // commands for many people var $step; // current step of the comm array - var $garbage_timeout; + // externalized var $garbage_timeout; var $shm_sz; function Room () { @@ -1029,7 +1043,8 @@ class Room { else $this->table[$i]->auth_only = FALSE; } - $this->garbage_timeout = 0; + // externalized $this->garbage_timeout = 0; + Room::garbage_time_expire_set(0); $this->shm_sz = SHM_DIMS_MIN; } @@ -1043,7 +1058,9 @@ class Room { /* Garbage collector degli utenti in timeout */ $curtime = time(); - if ($force || $this->garbage_timeout < $curtime) { + + // externalized if ($force || $this->garbage_timeout < $curtime) { + if ($force || Room::garbage_time_is_expired($curtime)) { // FIXME BRISK4: include for each kind of table require_once("${G_base}briskin5/Obj/briskin5.phh"); @@ -1056,11 +1073,11 @@ class Room { if ($table_cur->player_n == PLAYERS_N) { log_main("PLAYERS == N TABLE ".$table_idx); - if (($sem = Briskin5::lock_data($table_idx)) != FALSE) { + if (($sem = Bin5::lock_data($table_idx)) != FALSE) { log_main("bin5 lock data success"); $no_recovery = FALSE; - if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + if (($bri = Bin5::load_data($table_idx)) != FALSE) { if ($table_cur->table_token != $bri->table_token) { log_main("ERROR: not matching table_token. Room: ".$table_cur->table_token." Table: ".$bri->table_token); log_main("ERROR: not matching table_start. Room: ".$table_cur->table_start." Table: ".$bri->table_start); @@ -1107,7 +1124,7 @@ class Room { $this->room_join_wakeup(&$user_cur, FALSE, 0); $table_cur->table_token = ""; $table_cur->wakeup_time = $curtime + WAKEUP_TIME; - Briskin5::destroy_data($table_idx); + Bin5::destroy_data($table_idx); } else { log_main("gm:: save_data"); @@ -1116,9 +1133,9 @@ class Room { $this->user[$table_cur->player[$i]]->lacc = $bri->user[$i]->lacc; } - Briskin5::save_data(&$bri); + Bin5::save_data(&$bri); } - } // else if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + } // else if (($bri = &Bin5::load_data($table_idx)) != FALSE) { else if ($no_recovery == FALSE) { log_crit("ERROR: table ".$table_idx." unrecoverable join"); @@ -1146,7 +1163,7 @@ class Room { $table_cur->table_token = ""; } - Briskin5::unlock_data($sem); + Bin5::unlock_data($sem); } // bri::lock_data } // if ($table_cur->player_n == PLAYERS_N) { } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { @@ -1172,7 +1189,7 @@ class Room { log_rd2("AUTO LOGOUT."); if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table') - $this->room_wakeup(&$user_cur); + $this->room_wakeup($user_cur); else if ($user_cur->subst == 'standup') $this->room_outstandup(&$user_cur); else @@ -1182,7 +1199,7 @@ class Room { if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < $curtime) { // lo rimettiamo in piedi if ($user_cur->stat == 'room' && $user_cur->subst == 'sitdown') { - $this->room_wakeup(&$user_cur); + $this->room_wakeup($user_cur); $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; /* MLANG:
Sei stato inattivo per ".(EXPIRE_TIME_SMAMMA/60.0)." minuti.

Quindi ritorni tra i Giocatori in piedi.", "torna ai tavoli" */ $user_cur->comm[$user_cur->step % COMM_N] .= show_notify($mlang_brisk['tabtout_a'][$G_lang].(EXPIRE_TIME_SMAMMA/60.0).$mlang_brisk['tabtout_b'][$G_lang], 0, $mlang_brisk['btn_backstand'][$G_lang], 400, 100); @@ -1192,7 +1209,8 @@ class Room { } log_rd2("GARBAGE UPDATED!"); - $this->garbage_timeout = time() + GARBAGE_TIMEOUT; + // externalized $this->garbage_timeout = time() + GARBAGE_TIMEOUT; + Room::garbage_time_expire_set(time() + GARBAGE_TIMEOUT); $ismod = TRUE; } @@ -1239,8 +1257,8 @@ class Room { // $ret .= table_act_content(($user->subst == 'standup'), $this->table[$i]->player_n, $i, $user->table, // ($this->table[$i]->auth_only == FALSE ? TRUE : $user->flags & USER_FLAG_AUTH)); $ret .= $this->table[$i]->act_content($user); - if ($this->table[$i]->wag_own != NULL) - $ret .= sprintf('tra.add(%d, "%s: %s"); ', $i, $this->table[$i]->wag_own->name, $this->table[$i]->wag_com); + if ($this->table[$i]->wag_own != -1) + $ret .= sprintf('tra.add(%d, "%s: %s"); ', $i, $this->user[$this->table[$i]->wag_own]->name, $this->table[$i]->wag_com); else $ret .= sprintf('tra.rem(%d); ', $i); } @@ -1250,7 +1268,7 @@ class Room { } - function room_wakeup(&$user) + function room_wakeup($user) { $table_idx = $user->table; $table = &$this->table[$table_idx]; @@ -1267,7 +1285,7 @@ class Room { $user_cur = &$this->user[$table->player[$i]]; log_main("PREIMPOST: INLOOP name: ".$user_cur->name); - if ($user_cur != $user) { + if ($user->idx_get() != $table->player[$i]) { $user_cur->stat_set("room"); $user_cur->subst = "sitdown"; $user_cur->laccwr = $curtime; @@ -1286,11 +1304,10 @@ class Room { $user->laccwr = $curtime; } - $remove_wagon = false; - if($table->wag_own == $user) { - $remove_wagon = true; + $remove_wagon = FALSE; + if($table->wag_own == $user->idx_get()) { $table->wag_reset($curtime); - + $remove_wagon = TRUE; } @@ -1298,14 +1315,14 @@ class Room { $table->user_rem(&$this, &$user); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($user_cur->sess == '' || $user_cur->stat != 'room') continue; // log_main("VALORI: name: ".$user_cur->name."from_table: ".$from_table." tab: ".$user_cur->table." taix: ".$table_idx." ucur: ".$user_cur." us: ".$user); $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : ""); - if ($from_table && ($user_cur->table == $table_idx || $user_cur == $user)) { + if ($from_table && ($user_cur->table == $table_idx || $user->idx_get() == $i)) { $ret .= 'gst.st_loc++; the_end=true; window.onunload = null; window.onbeforeunload = null; document.location.assign("index.php");|'; // $ret .= 'gst.st_loc++; document.location.assign("index.php");|'; log_main("DOCUMENT.index.php: from table"); @@ -1319,7 +1336,7 @@ class Room { // $ret .= table_act_content(FALSE, 0, $table_idx, $user->table, FALSE); $ret .= $table->act_content($user); - if ($user_cur == $user) { + if ($user->idx_get() == $i) { // set the new status $ret .= 'subst = "standup"; tra.show(); '; // clean the action buttons in other tables @@ -1375,13 +1392,13 @@ class Room { $user_cur->table = -1; $user_wup[$user_wup_n++] = &$user_cur; - $remove_wagon = false; - if($table->wag_own == $user_cur) { - $remove_wagon = true; + $remove_wagon = FALSE; + if($table->wag_own == $table->player[$i]) { + $remove_wagon = TRUE; $table->wag_reset($curtime); } } - $user_tab[$user_tab_n++] = &$user_cur; + $user_tab[$user_tab_n++] = $table->player[$i]; } } @@ -1414,8 +1431,8 @@ class Room { for ($tab_idx = 0 ; $tab_idx < $user_tab_n ; $tab_idx++) - if ($user_cur == $user_tab[$tab_idx]) - break; + if ($user_tab[$tab_idx] == $i) + break; // for users that wakeup the room will be reconstructed by index_rd.php if ($tab_idx < $user_tab_n) { @@ -1473,7 +1490,7 @@ class Room { if ($table_idx > -1) $ret .= $this->table_content($user_cur, $table_idx); - if ($user_cur == $user) { + if ($user->idx_get() == $i) { $itin = ($user->flags & USER_FLAG_AUTH ? "" : ""); $itou = ($user->flags & USER_FLAG_AUTH ? "" : ""); $ret .= sprintf('$("myname").innerHTML = "%s%s%s: ";', $itin, xcape($user->name), $itou); @@ -1485,24 +1502,23 @@ class Room { log_main("table_update: post"); } - function room_sitdown(&$user, $table_idx) + function room_sitdown($user, $table_idx) { log_main("room_sitdown ".($user == FALSE ? "USER: FALSE" : "USER: ".$user->name)); $train_app = ""; if ($table_idx > -1 && $table_idx < TABLES_N) { - $table = &$this->table[$table_idx]; + $table = $this->table[$table_idx]; // wagon shutdown - if ($table->wag_own != NULL && $table->player_n == PLAYERS_N) { + if ($table->wag_own != -1 && $table->player_n == PLAYERS_N) { for ($i = 0 ; $i < TABLES_N ; $i++) { - $user_cur =& $this->user[$table->player[$i]]; - if ($user_cur == $table->wag_own) { - $train_app = sprintf("tra.rem(%d); ", $table_idx); - $table->wag_reset(time()); - break; - } + if ($table->wag_own == $table->player[$i]) { + $train_app = sprintf("tra.rem(%d); ", $table_idx); + $table->wag_reset(time()); + break; + } } } } @@ -1518,7 +1534,7 @@ class Room { $ret .= $this->table_content($user_cur, $table_idx); $ret .= $this->standup_content($user_cur); - if ($user_cur == $user) { + if ($user->idx_get() == $i) { $ret .= 'subst = "sitdown"; tra.hide(); '; // clean the action buttons in other tables for ($e = 0 ; $e < TABLES_N ; $e++) { @@ -1538,7 +1554,7 @@ class Room { } } - function chatt_send(&$user, $mesg) + function chatt_send($user, $mesg) { GLOBAL $G_base, $G_alarm_passwd, $mlang_brisk, $G_lang; $only_you = FALSE; @@ -1574,7 +1590,7 @@ class Room { $table = &$this->table[$user->table]; - if ($table->wag_own != NULL) { + if ($table->wag_own != -1) { // MLANG
Il messaggio di segnalazione del tavolo è già attivato.

$msg = $mlang_brisk['tickjust'][$G_lang]; $to_user = show_notify($msg, 0, "chiudi", 400, 100); @@ -1594,7 +1610,7 @@ class Room { $msg = substr($msg, 5); - $table->wag_set($user, $msg); + $table->wag_set($user->idx_get(), $msg); $to_user = sprintf('tra.add(%d, "%s");', $user->table, xcape(sprintf("%s: %s", $user->name, $msg))); $to_room = $to_user; /* for old isolation management $is_ticker = TRUE; */ @@ -1857,11 +1873,10 @@ class Room { if ($to_room != FALSE) { for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($target != "" && $user_cur->name != $target) continue; - // if ($user_cur->sess == '' || $user_cur->stat != 'room') - if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user_cur == $user) + if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user->idx_get() == $i) continue; if ($is_normchat == TRUE) { @@ -1921,9 +1936,9 @@ class Room { $bri_user->comm[$bri_user->step % COMM_N] .= $to_tabl; $bri_user->step_inc(); } - Briskin5::save_data(&$bri); + Bin5::save_data(&$bri); } - Briskin5::unlock_data($sem); + Bin5::unlock_data($sem); } // bri::lock_data } // if ($table_cur->player_n == PLAYERS_N) { } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { @@ -2077,15 +2092,15 @@ class Room { if ($ghost_user->stat == "table" && $this->table[$table_idx]->player_n == PLAYERS_N) { // FIXME BRISK4: include for each kind of table require_once("${G_base}briskin5/Obj/briskin5.phh"); - if (($brisem = Briskin5::lock_data($table_idx)) != FALSE) { - if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + if (($brisem = Bin5::lock_data($table_idx)) != FALSE) { + if (($bri = &Bin5::load_data($table_idx)) != FALSE) { if ($bri->the_end != TRUE) { $bri->user[$ghost_user->table_pos]->step_inc(); $bri->user[$ghost_user->table_pos]->sess = $sess; - Briskin5::save_data(&$bri); + Bin5::save_data(&$bri); } } - Briskin5::unlock_data($brisem); + Bin5::unlock_data($brisem); } } @@ -2191,7 +2206,7 @@ class Room { function standup_update($user) { for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; + $user_cur = $this->user[$i]; if ($user_cur->sess == '') continue; @@ -2199,7 +2214,7 @@ class Room { if ($user_cur->stat == 'room') { $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ".$this->standup_content($user_cur); - if ($user_cur == $user) { + if ($user->idx_get() == $i) { $itin = ($user->flags & USER_FLAG_AUTH ? "" : ""); $itou = ($user->flags & USER_FLAG_AUTH ? "" : ""); @@ -2268,7 +2283,7 @@ class Room { shm_detach($shm); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $room->user[$i] = User::load_data($i); + $room->user[$i] = User::load_data($i, FALSE); } } @@ -2366,32 +2381,33 @@ class Room { User::save_data($user_park[$i], $i); $room->user[$i] = $user_park[$i]; } + log_load("FINISH: ".($ret == TRUE ? "TRUE" : "FALSE")); return ($ret); } - function lock_data() + static function lock_data() { - GLOBAL $sess; - - // echo "LOCK: ".FTOK_PATH."/main"; - // exit; - if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) { - return (FALSE); - } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { - return (FALSE); - } - if (sem_acquire($res)) { - log_lock("LOCK room"); - return ($res); - } - else - return (FALSE); + GLOBAL $sess; + + // echo "LOCK: ".FTOK_PATH."/main"; + // exit; + if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) { + return (FALSE); + } + // echo "FTOK ".$tok."
"; + if (($res = sem_get($tok)) == FALSE) { + return (FALSE); + } + if (sem_acquire($res)) { + log_lock("LOCK room"); + return ($res); + } + else + return (FALSE); } - function unlock_data($res) + static function unlock_data($res) { GLOBAL $sess; @@ -2409,8 +2425,8 @@ class Room { if ($user->stat != 'room') return; - for ($e = 0 , $ct = 0 ; $ct < 4 && $e < MAX_PLAYERS ; $e++) { - if ($this->user[$e]->sess == "" || $this->user[$e]->stat != "room" || $this->user[$e]->name == "") + for ($i = 0 , $ct = 0 ; $ct < 4 && $i < MAX_PLAYERS ; $i++) { + if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "") continue; $ct++; } @@ -2419,20 +2435,19 @@ class Room { $content = ' j_stand_cont( [ '; - for ($e = 0 , $ct = 0 ; $e < MAX_PLAYERS ; $e++) { - if ($this->user[$e]->sess == "" || $this->user[$e]->stat != "room" || $this->user[$e]->name == "") + for ($i = 0 , $ct = 0 ; $i < MAX_PLAYERS ; $i++) { + if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "") continue; - $flags = $this->user[$e]->flags; + $flags = $this->user[$i]->flags; - if ($this->user[$e]->subst == "standup") { - if ($this->user[$e] == $user) - { - $flags |= 1; + if ($this->user[$i]->subst == "standup") { + if ($user->idx_get() == $i) { + $flags |= 1; } - - $content .= sprintf('%s[ %d, "%s" ]',($ct > 0 ? ', ' : ''), $flags, xcape($this->user[$e]->name)); - $ct++; + + $content .= sprintf('%s[ %d, "%s" ]',($ct > 0 ? ', ' : ''), $flags, xcape($this->user[$i]->name)); + $ct++; } } $content .= ' ]);'; @@ -2457,16 +2472,16 @@ class Room { $content = "[ "; for ($i = 0 ; $i < $table->player_n ; $i++) { - $user_cur = &$this->user[$table->player[$i]]; - - $flags = $user_cur->flags; - - if ($user_cur == $user) - $flags |= 1; - - log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx)); - - $content .= sprintf('%s[ %d, "%s" ]',($i == 0 ? '' : ', '), $flags, xcape($user_cur->name)); + $user_cur = &$this->user[$table->player[$i]]; + + $flags = $user_cur->flags; + + if ($user->idx_get() == $table->player[$i]) + $flags |= 1; + + log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx)); + + $content .= sprintf('%s[ %d, "%s" ]',($i == 0 ? '' : ', '), $flags, xcape($user_cur->name)); } $content .= ' ]'; @@ -2476,6 +2491,49 @@ class Room { return ($ret); } + static function garbage_time_is_expired($tm) + { + $ret = TRUE; + $fp = FALSE; + do { + if (file_exists(PROXY_PATH) == FALSE) + mkdir(PROXY_PATH); + if (($fp = @fopen(PROXY_PATH."/room_garbage_time.expired", 'rb')) == FALSE) + break; + if (($s = fread($fp, 4)) == FALSE) + break; + if (strlen($s) != 4) + break; + $arr = unpack('Le', $s); + if ($arr['e'] > $tm) + $ret = FALSE; + } while (0); + + if ($fp != FALSE) + fclose($fp); + + log_rd2("END: return ".($ret ? "TRUE" : "FALSE")); + + return ($ret); + } + + static function garbage_time_expire_set($tm) + { + do { + if (file_exists(PROXY_PATH) == FALSE) + mkdir(PROXY_PATH); + if (($fp = @fopen(PROXY_PATH."/room_garbage_time.expired", 'wb')) == FALSE) + break; + fwrite($fp, pack("L",$tm)); + fclose($fp); + + return (TRUE); + } while (0); + + return (FALSE); + } + + } // end class Room function make_seed() @@ -2484,240 +2542,282 @@ function make_seed() return (float) $sec + ((float) $usec * 100000); } +function btrace_line($ar) +{ + GLOBAL $G_btrace_pref_sub; -function log_mop($step, $log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LMOP) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("LMOP: [%f] [%05d] [%s] [%s]\n", gettimeofday(TRUE), $step, $PHP_SELF, $log)); - fclose($fp); - } + $ret = ""; + for ($i = 0 ; $i < count($ar) ; $i++) { + $with_class = isset($ar[$i]['class']); + $with_file = isset($ar[$i]['file']); + $ret .= sprintf("%s%s%s (%s:%d)", ($i == 0 ? "" : ", "), + ($with_class ? $ar[$i]['class'].$ar[$i]['type'] : ""), + $ar[$i]['function'], ($with_file ? str_replace($G_btrace_pref_sub, "", $ar[$i]['file']) : ""), + ($with_file ? $ar[$i]['line'] : "")); + } + + return ($ret); } - -function log_only2($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONL2) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("ONL2: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_mop($step, $log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LMOP) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("LMOP: [%f] [%05d] [%s] [%s]\n", gettimeofday(TRUE), $step, $log, $btrace)); + fclose($fp); + } } -function log_crit($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 0) - return; - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("CRIT: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_only2($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONL2) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("ONL2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_only($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONLY) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("ONLY: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_crit($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("CRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_main($log) { +function log_only($log) +{ GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_MAIN) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("MAIN: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONLY) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("ONLY: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_rd($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_READ) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_main($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_MAIN) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("MAIN: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_rd2($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_REA2) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_rd($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_READ) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_send($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SEND) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SEND: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_rd2($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_REA2) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_lock($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOCK) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("LOCK: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_send($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SEND) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("SEND: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_wr($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_WRIT) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; - - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("WRIT: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_lock($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOCK) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("LOCK: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_load($log) { - GLOBAL $sess, $PHP_SELF; - - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOAD) == 0) - return; - - if (isset($sess) == FALSE) - $ssess = "XXXX"; - else - $ssess = $sess; +function log_wr($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_WRIT) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("WRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } +} - if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0) - return; - - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("LOAD: [%s] [%s] [%s]\n", $ssess, $PHP_SELF, $log)); - fclose($fp); - } +function log_load($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOAD) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("LOAD: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } } -function log_auth($sess, $log) { +function log_auth($sess, $log) +{ GLOBAL $PHP_SELF; - if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_AUTH) == 0) - return; - - if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0) - return; - if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { - fwrite($fp, sprintf("AUTH: [%s] [%d] [%s] [%s]\n", $sess, time(), $PHP_SELF, $log)); - fclose($fp); - } + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_AUTH) == 0) + return; + + if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0) + return; + + $btrace = btrace_line(debug_backtrace()); + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("LOAD: [%s] [%d] [%s] [%s]\n", $sess, time(), $log, $btrace)); + fclose($fp); + } }