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));
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));
}
- function save_data(&$user, $id)
+ function save_data($user, $id)
{
GLOBAL $sess;
// 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) {
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 () {
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;
}
/* 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");
}
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;
}
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);
}
}
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()