X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=a5bec276d13ecb9383ac991c12b105c4e2427932;hb=ff3c49ff3cbad45961f1a8d5264f587598134556;hp=fa53c6291a1a8ea790f64c60754ce7d593225343;hpb=e4bf569ad33ddc0459769eb1fa1e0113bb83899d;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index fa53c62..a5bec27 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -70,7 +70,8 @@ define(DBG_LOAD, 0x0100); define(DBG_AUTH, 0x0200); define(DBG_CRIT, 0x0400); define(DBG_LMOP, 0x0800); - +define(DBG_TRAC, 0x1000); +define(DBG_SHME, 0x2000); // NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols define(BRISK_DEBUG, 0xffffffbf); @@ -134,7 +135,7 @@ $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.5.1"; +$G_brisk_version = "3.5.3"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ $root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': terza versione di test per la nuova gestione dei dati volatili, rivista gestione del ticker.', @@ -363,6 +364,23 @@ function xcapemesg($s) } +class Vect { + function Vect($a) + { + $this->el = $a; + } + + function getbyid($idx) + { + return ($this->el[$idx]); + } + + function setbyid($idx, $v) + { + $this->el[$idx] = $v; + } +} + class Table { var $idx; var $player; @@ -802,7 +820,7 @@ class User { /* if (validate_sess($this->sess)) { if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); $fp = fopen(PROXY_PATH."/".$this->sess.".stat", 'w'); fwrite($fp, sprintf("%s\n",$this->stat)); fclose($fp); @@ -831,7 +849,7 @@ class User { if (validate_sess($this->sess) == FALSE) break; if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE) break; fwrite($fp, pack("LL",$this->step, $this->idx)); @@ -853,7 +871,7 @@ class User { break; if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) break; if (($s = fread($fp, 8)) == FALSE) @@ -875,13 +893,20 @@ class User { return (FALSE); } + static function unproxy_step($sess) { + log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step"); + if (file_exists(PROXY_PATH) == FALSE) + return; + @unlink(PROXY_PATH."/".$sess.".step"); + } + function reset() { $curtime = time(); log_legal($curtime, $this, "STAT:LOGOUT", ''); $tmp_sess = $this->sess; $this->sess = ""; - step_unproxy($tmp_sess); + self::unproxy_step($tmp_sess); $this->name = ""; // OK here while (array_pop($this->comm) != NULL); $this->step = 0; @@ -897,11 +922,9 @@ class User { { log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] "); - $doexit = FALSE; do { if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { log_main("ftok failed"); - $doexit = TRUE; break; } @@ -913,10 +936,10 @@ class User { $shm_sz = SHM_DIMS_U_MIN; if ($shm = shm_attach($tok, $shm_sz)) { - $user = @shm_get_var($shm, $tok); - + if (($user = @shm_get_var($shm, $tok)) == FALSE) { + break; + } 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")); @@ -930,6 +953,7 @@ class User { log_only("PUT_VAR FALLITA ".strlen(serialize($user))); log_only(serialize($user)); } + log_shme("User::save_data2"); } else { if ($sess != FALSE) { @@ -956,9 +980,6 @@ class User { return ($user); } while (0); - if ($doexit) - exit(); - return (FALSE); } @@ -977,10 +998,13 @@ class User { break; // log_only("PUT_VAR DI ".strlen(serialize($user))); - if (shm_put_var($shm, $tok, $user) != FALSE) { + if (@shm_put_var($shm, $tok, $user) != FALSE) { shm_detach($shm); if ($user->sess != "") $user->save_step(); + + log_shme("User::save_data"); + log_main("User[".$id."] saved."); return (TRUE); } @@ -1002,15 +1026,10 @@ class User { } // end class User -function step_unproxy($sess) { - log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step"); - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); - @unlink(PROXY_PATH."/".$sess.".step"); -} - class Room { + static $delta_t; + var $user; var $table; var $comm; // commands for many people @@ -1060,7 +1079,9 @@ class Room { $curtime = time(); // externalized if ($force || $this->garbage_timeout < $curtime) { - if ($force || Room::garbage_time_is_expired($curtime)) { + if (!$force && !Room::garbage_time_is_expired($curtime)) { + return ($ismod); + } // FIXME BRISK4: include for each kind of table require_once("${G_base}briskin5/Obj/briskin5.phh"); @@ -1097,7 +1118,7 @@ class Room { // is the end of the table if ($bri->the_end == TRUE) { - /* + /* * DESTROY OF FINISHED TABLE && MOVE PLAYER TO ROOM AGAIN */ log_main("garbage_manager: INSIDE THE END."); @@ -1124,7 +1145,8 @@ class Room { $this->room_join_wakeup($user_cur, FALSE, 0); $table_cur->table_token = ""; $table_cur->wakeup_time = $curtime + WAKEUP_TIME; - Bin5::destroy_data($table_idx); + + $bri->destroy_data($table_idx); } else { log_main("gm:: save_data"); @@ -1212,7 +1234,6 @@ class Room { // externalized $this->garbage_timeout = time() + GARBAGE_TIMEOUT; Room::garbage_time_expire_set($curtime + GARBAGE_TIMEOUT); $ismod = TRUE; - } return ($ismod); } @@ -2239,12 +2260,10 @@ class Room { function load_data() { GLOBAL $sess; - $doexit = FALSE; do { if (($tok = @ftok(FTOK_PATH."/main", "B")) == -1) { log_main("ftok failed"); - $doexit = TRUE; break; } @@ -2256,7 +2275,7 @@ class Room { $shm_sz = SHM_DIMS_MIN; if ($shm = shm_attach($tok, $shm_sz)) { - $room = @shm_get_var($shm, $tok); + $room = @shm_get_var($shm, $tok); // CHECKED BELOW log_only("bri == ".($room == FALSE ? "FALSE" : "TRUE")." bri === ".($room === FALSE ? "FALSE" : "TRUE")." bri isset ".(isset($room) ? "TRUE" : "FALSE")); if (isset($room)) @@ -2268,6 +2287,8 @@ class Room { $room = Room::create(); + log_shme("Room::create"); + if (Room::save_data($room) == FALSE) return FALSE; @@ -2278,7 +2299,13 @@ class Room { shm_detach($shm); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $room->user[$i] = User::load_data($i, FALSE); + if (($room->user[$i] = User::load_data($i, FALSE)) == FALSE) { + log_crit("Bin5_user::load_data failed"); + break; + } + } + if ($i < MAX_PLAYERS) { + break; } } @@ -2288,9 +2315,6 @@ class Room { return ($room); } while (0); - if ($doexit) - exit(); - return (FALSE); } @@ -2311,7 +2335,7 @@ class Room { break; // log_only("PUT_VAR DI ".strlen(serialize($room))); - if (shm_put_var($shm, $tok, $room) != FALSE) { + if (@shm_put_var($shm, $tok, $room) != FALSE) { shm_detach($shm); return (TRUE); } @@ -2353,7 +2377,8 @@ class Room { break; // log_only("PUT_VAR DI ".strlen(serialize($room))); - if (shm_put_var($shm, $tok, $room) != FALSE) { + if (@shm_put_var($shm, $tok, $room) != FALSE) { + log_shme("Room::save_data"); $ret = TRUE; break; } @@ -2391,8 +2416,10 @@ class Room { if (($res = sem_get($tok)) == FALSE) { return (FALSE); } - if (sem_acquire($res)) { - log_lock("LOCK room"); + if (sem_acquire($res)) { + self::$delta_t = microtime(TRUE); + log_lock("LOCK room [".self::$delta_t."]"); + return ($res); } else @@ -2403,7 +2430,7 @@ class Room { { GLOBAL $sess; - log_lock("UNLOCK room"); + log_lock("UNLOCK room [".(microtime(TRUE) - (self::$delta_t))."]"); return (sem_release($res)); } @@ -2489,7 +2516,7 @@ class Room { $fp = FALSE; do { if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); if (($fp = @fopen(PROXY_PATH."/garbage_time.expired", 'rb')) == FALSE) break; if (($s = fread($fp, 4)) == FALSE) @@ -2513,7 +2540,7 @@ class Room { { do { if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH); + mkdir(PROXY_PATH, 0775, TRUE); if (($fp = @fopen(PROXY_PATH."/garbage_time.expired", 'wb')) == FALSE) break; fwrite($fp, pack("L",$tm)); @@ -2551,6 +2578,16 @@ function btrace_line($ar) return ($ret); } +function trace_ftok($id, $add) +{ + // NOTE: without space to use sed to substitute "= @ftok(" with "= @ftok(" + $tok=@ftok($id, $add); + + log_shme($tok.": ".$id." + ".$add); + + return ($tok); +} + function log_mop($step, $log) { GLOBAL $sess, $PHP_SELF; @@ -2566,7 +2603,10 @@ function log_mop($step, $log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; 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); @@ -2589,7 +2629,10 @@ function log_only2($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("ONL2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2611,7 +2654,10 @@ function log_crit($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("CRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2633,7 +2679,10 @@ function log_only($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("ONLY: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2655,7 +2704,10 @@ function log_main($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("MAIN: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2676,8 +2728,11 @@ function log_rd($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0) return; - - $btrace = btrace_line(debug_backtrace()); + + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2699,7 +2754,10 @@ function log_rd2($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); @@ -2722,7 +2780,10 @@ function log_send($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("SEND: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2744,7 +2805,10 @@ function log_lock($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LOCK: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2766,7 +2830,10 @@ function log_wr($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("WRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2788,7 +2855,10 @@ function log_load($log) if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LOAD: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2805,13 +2875,42 @@ function log_auth($sess, $log) if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0) return; - $btrace = btrace_line(debug_backtrace()); + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("LOAD: [%s] [%d] [%s] [%s]\n", $sess, time(), $log, $btrace)); fclose($fp); } } +function log_shme($log) +{ + GLOBAL $sess, $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SHME) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SHME) == 0) + return; + + if (BRISK_DEBUG & DBG_TRAC) + $btrace = btrace_line(debug_backtrace()); + else + $btrace = ""; + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("SHME: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); + fclose($fp); + } +} + + // function log_legal($curtime, $sess, $name, $where, $mesg) function log_legal($curtime, $user, $where, $mesg) @@ -2827,28 +2926,6 @@ function log_legal($curtime, $user, $where, $mesg) } } - -function lock_banlist() -{ - if (($tok = @ftok(FTOK_PATH."/main", "L")) == -1) { - echo "FTOK FAILED"; - exit; - } - if (($res = sem_get($tok)) == FALSE) { - echo "SEM_GET FAILED"; - exit; - } - if (sem_acquire($res)) - return ($res); - else - return (FALSE); -} - -function unlock_banlist($res) -{ - return (sem_release($res)); -} - function table_act_content($isstanding, $sitted, $table, $cur_table, $allowed) { $ret = ""; @@ -2968,6 +3045,8 @@ function sharedmem_sz($tok) } class Warrant { + static $delta_t; + function lock_data() { GLOBAL $sess; @@ -2980,7 +3059,8 @@ class Warrant { return (FALSE); } if (sem_acquire($res)) { - log_lock("LOCK warrant"); + self::$delta_t = microtime(TRUE); + log_lock("LOCK warrant [".self::$delta_t."]"); return ($res); } else @@ -2991,13 +3071,15 @@ class Warrant { { GLOBAL $sess; - log_lock("UNLOCK warrant"); - + log_lock("UNLOCK warrant [".(microtime(TRUE) - (self::$delta_t))."]"); + return (sem_release($res)); } } class Poll { + static $delta_t; + function lock_data() { GLOBAL $sess; @@ -3009,9 +3091,11 @@ class Poll { if (($res = sem_get($tok)) == FALSE) { return (FALSE); } - if (sem_acquire($res)) { - log_lock("LOCK poll"); - return ($res); + if (sem_acquire($res)) { + self::$delta_t = microtime(TRUE); + log_lock("LOCK poll [".self::$delta_t."]"); + + return ($res); } else return (FALSE); @@ -3021,7 +3105,7 @@ class Poll { { GLOBAL $sess; - log_lock("UNLOCK poll"); + log_lock("UNLOCK poll [".(microtime(TRUE) - (self::$delta_t))."]"); return (sem_release($res)); }