X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=1893940a11b999cee6e17c2175ca15a44010a742;hb=440ccf37d9c67a25d407793effdaad3f610d9554;hp=7460da5388ef365b45fa4c93d4c57e241b558aad;hpb=f8d98f354ae51f7223e08e8a3dfaa2b2b466c8dc;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 7460da5..1893940 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -895,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)); @@ -903,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)); @@ -928,7 +932,7 @@ class User { } - function save_data(&$user, $id) + function save_data($user, $id) { GLOBAL $sess; @@ -947,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) { @@ -1010,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 () { @@ -1038,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; } @@ -1052,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"); @@ -1201,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; } @@ -2274,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); } } @@ -2372,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; @@ -2481,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()