X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=ecd4b41521a2ca2dbd3e2affdc8eed995c820cb7;hb=971fb704f6cb6091d0c597209f5f878c04336d51;hp=7805b2fba22ac72d1ebc0788253b7aeea2de81d9;hpb=06dda19a43945c3d204484350ca4bc9eed4e0d47;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 7805b2f..ecd4b41 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -5,13 +5,15 @@ class Briskin5 { var $user; var $table; var $table_idx; + var $table_token; + var $comm; // commands for many people var $step; // current step of the comm array var $garbage_timeout; var $tok; - function Briskin5 (&$room, $table_idx) { + function Briskin5 (&$room, $table_idx, $table_token) { $this->user = array(); $this->table = array(); @@ -25,11 +27,13 @@ class Briskin5 { log_wr("xxx", "Briskin5 constructor"); - for ($i = 0 ; $i < $table->player_n ; $i++) + for ($i = 0 ; $i < $table->player_n ; $i++) { + $user[$table->player[$i]]->table_token = $table_token; $this->user[$i] =& User::spawn(&$user[$table->player[$i]], 0, $i); - + } $this->table[0] =& Table::spawn(&$table); $this->table_idx = $table_idx; + $this->table_token = $table_token; $this->garbage_timeout = 0; log_wr("xxx", "Briskin5 constructor end"); @@ -65,10 +69,11 @@ class Briskin5 { { /* Garbage collector degli utenti in timeout */ + $ismod = FALSE; $curtime = time(); if ($force || $this->garbage_timeout < $curtime) { - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + for ($i = 0 ; $i < MAX_BRISKIN5_PLAYERS ; $i++) { $user_cur = &$this->user[$i]; if ($user_cur->sess == "") continue; @@ -76,41 +81,32 @@ class Briskin5 { 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') { + if ($user_cur->stat == 'table') { log_auth($user_cur->sess, "Autologout session."); - + + /* SI DELEGA AL garbage_manager principale LA RIMOZIONE DELL'UTENTE + $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(); + $this->table_wakeup(&$user_cur); } } } log_rd2($user_cur->sess, "GARBAGE UPDATED!"); - $this->garbage_timeout = time() + GARBAGE_TIMEOUT; + $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT; + $ismod = TRUE; } - // BAN_IP_CLEAN - + return ($ismod); } @@ -119,7 +115,7 @@ class Briskin5 { // // static functions // - function &load_data($table_idx) + function &load_data($table_idx, $table_token = "") { GLOBAL $G_false, $sess; $shm = FALSE; @@ -131,12 +127,21 @@ class Briskin5 { } do { + // if (shmchk_exists($tok) == FALSE) + if (locshm_exists($tok) == FALSE) + break; + if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE) break; if (($bri = @shm_get_var($shm, $tok)) == FALSE) break; + if ($table_token != "" && $bri->table_token != $table_token) { + log_wr($sess, "bri->table_token: ".$bri->table_token."table_token: ".$table_token); + + break; + } $bri->tok = $tok; shm_detach($shm); @@ -147,6 +152,8 @@ class Briskin5 { if ($shm != FALSE) shm_detach($shm); + + log_wr($sess, "briskin5 load_data failed"); return ($G_false); } @@ -160,6 +167,7 @@ class Briskin5 { $shm = FALSE; $isacq = FALSE; + log_main("XXX", "SAVE BRISKIN5 DATA"); // var_dump($bri); if (!isset($bri->tok)) @@ -187,30 +195,37 @@ class Briskin5 { return ($ret); } - function destroy_data(&$bri) + function destroy_data($table_idx) { GLOBAL $sess; - + $ret = FALSE; $shm = FALSE; $isacq = FALSE; - - // var_dump($bri); - - if (!isset($bri->tok)) - return (FALSE); + + log_main("XXX", "DESTROY BRISKIN5 DATA"); + do { $isacq = TRUE; - if (($shm = shm_attach($bri->tok, SHM_DIMS)) == FALSE) + log_main("XXX", "DESTROY2 BRISKIN5 DATA"); + + if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) + break; + + if (($shm = shm_attach($tok, SHM_DIMS)) === FALSE) break; - if (shm_remove($shm) == FALSE) { + if (shm_remove($shm) === FALSE) { log_only($sess, "REMOVE FALLITA ".strlen(serialize($bri))); log_only($sess, serialize($bri)); break; } + + $shm = FALSE; + log_main("XXX", "DESTROY2 BRISKIN5 DATA SUCCESS"); + // log_main("XXX", "QUI CI ARRIVA [".$bri->user[0]->name."]"); $ret = TRUE; } while (0); @@ -361,11 +376,11 @@ class Briskin5 { { $table = &$this->table[0]; - log_main("WAKEUP", "begin function table stat: ".$user->stat." subst: ".$user->subst); + log_main("BRISKIN5_WAKEUP", "begin function table stat: ".$user->stat." subst: ".$user->subst); $curtime = time(); - log_main("WAKEUP", "from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n); + log_main("BRISKIN5_WAKEUP", "from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n); for ($i = 0 ; $i < $table->player_n ; $i++) { $user_cur = &$this->user[$i]; @@ -385,8 +400,47 @@ class Briskin5 { $user_cur->step_inc(); } } + + /* + * If all players are freezed the room garbage_manager clean up table and users. + */ + function is_abandoned() + { + $is_ab = TRUE; + $curtime = time(); + $table = &$this->table[0]; + + for ($i = 0 ; $i < $table->player_n ; $i++) { + $user_cur = &$this->user[$i]; + if ($user_cur->lacc + (EXPIRE_TIME_RD * 2) >= $curtime) { + $is_ab = FALSE; + break; + } + } + + return ($is_ab); + } } // end of class Briskin5 +function locshm_exists($tok) +{ + // return (TRUE); + + if (($id = shmop_open($tok,"a", 0, 0)) == FALSE) { + log_main($tok, "SHM NOT exists"); + + return (FALSE); + } + else { + shmop_close($id); + log_main($tok, "SHM exists"); + + return (TRUE); + } + +} + + ?> \ No newline at end of file