user = array();
$this->table = array();
$user =& $room->user;
$table =& $room->table[$table_idx];
log_wr("xxx", "Briskin5 constructor");
for ($i = 0 ; $i < $table->player_n ; $i++)
$this->user[$i] =& User::spawn(&$user[$table->player[$i]], 0, $i);
$this->table[0] =& Table::spawn(&$table);
$this->table_idx = $table_idx;
$this->garbage_timeout = 0;
log_wr("xxx", "Briskin5 constructor end");
}
function &get_user($sess, &$idx)
{
GLOBAL $PHP_SELF, $G_false;
if (validate_sess($sess)) {
for ($i = 0 ; $i < MAX_BRISKIN5_PLAYERS ; $i++) {
if (strcmp($sess, $this->user[$i]->sess) == 0) {
// find it
$idx = $i;
$ret = &$this->user[$i];
return ($ret);
}
}
log_main($sess, sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
// for ($i = 0 ; $i < MAX_PLAYERS ; $i++)
// log_main($sess, sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
}
else {
log_main($sess, sprintf("get_user: Wrong strlen [%s]",$sess));
}
return ($G_false);
}
function garbage_manager($force)
{
/* Garbage collector degli utenti in timeout */
$curtime = time();
if ($force || $this->garbage_timeout < $curtime) {
for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
$user_cur = &$this->user[$i];
if ($user_cur->sess == "")
continue;
if ($user_cur->lacc + EXPIRE_TIME_RD < $curtime) { // Auto logout dell'utente
log_rd2($user_cur->sess, "AUTO LOGOUT.");
if ($user_cur->stat == 'table' || $user_cur->stat == 'room') {
log_auth($user_cur->sess, "Autologout session.");
$tmp_sess = $user_cur->sess;
$user_cur->sess = "";
step_unproxy($tmp_sess);
$user_cur->name = "";
$user_cur->the_end = FALSE;
log_rd2($user_cur->sess, "AUTO LOGOUT.");
if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table')
$this->room_wakeup(&$user_cur);
else if ($user_cur->subst == 'standup')
$this->room_outstandup(&$user_cur);
else
log_rd2($sess, "LOGOUT FROM WHAT ???");
}
}
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);
$user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
$user_cur->comm[$user_cur->step % COMM_N] .= show_notify("
Sei stato inattivo per ".(EXPIRE_TIME_SMAMMA/60.0)." minuti.
Quindi ritorni tra i Giocatori in piedi.", 0, "torna ai tavoli", 400, 100);
$user_cur->step_inc();
}
}
}
log_rd2($user_cur->sess, "GARBAGE UPDATED!");
$this->garbage_timeout = time() + GARBAGE_TIMEOUT;
}
// BAN_IP_CLEAN
}
//
// static functions
//
function &load_data($table_idx)
{
GLOBAL $G_false, $sess;
$shm = FALSE;
log_wr($sess, "TABLE_IDX ".FTOK_PATH."/table".$table_idx);
if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
echo "FTOK FAILED";
exit;
}
do {
if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE)
break;
if (($bri = @shm_get_var($shm, $tok)) == FALSE)
break;
shm_detach($shm);
$ret = &$bri;
return ($ret);
} while (FALSE);
if ($shm != FALSE)
shm_detach($shm);
return ($G_false);
}
function save_data(&$bri)
{
GLOBAL $sess;
$ret = FALSE;
$shm = FALSE;
$isacq = FALSE;
// var_dump($bri);
if (($tok = ftok(FTOK_PATH."/table".$bri->table_idx, "B")) == -1)
return (FALSE);
do {
$isacq = TRUE;
if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE)
break;
// log_only($sess, "PUT_VAR DI ".strlen(serialize($bri)));
if (shm_put_var($shm, $tok, $bri) == FALSE) {
log_only($sess, "PUT_VAR FALLITA ".strlen(serialize($bri)));
log_only($sess, serialize($bri));
break;
}
// log_main("XXX", "QUI CI ARRIVA [".$bri->user[0]->name."]");
$ret = TRUE;
} while (0);
if ($shm)
shm_detach($shm);
return ($ret);
}
function lock_data($table_idx)
{
GLOBAL $sess;
log_wr($sess, "LOCK_DATA ".FTOK_PATH."/table".$table_idx);
// echo "LOCK: ".FTOK_PATH."/main";
// exit;
if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
echo "FTOK FAILED";
exit;
}
// echo "FTOK ".$tok."
";
if (($res = sem_get($tok)) == FALSE) {
echo "SEM_GET FAILED";
exit;
}
if (sem_acquire($res)) {
log_only($sess, "LOCK");
return ($res);
}
else
return (FALSE);
}
function unlock_data($res)
{
GLOBAL $sess;
log_only($sess, "UNLOCK");
return (sem_release($res));
}
}
?>