- // 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) {
- log_only("REMOVE FALLITA");
- break;
- }
- shm_detach($shm);
- $user->shm_sz += SHM_DIMS_U_DLT;
- }
-
- if ($shm)
- shm_detach($shm);
-
- return (FALSE);
- }
-
-} // end class Bin5_user
-
-
-
-class Bin5 {
- var $user;
- var $table;
- var $comm; // commands for many people
- var $step; // current step of the comm array
- // externalized var $garbage_timeout;
- var $shm_sz;
-
- var $table_idx;
- var $table_token;
-
- var $the_end;
- var $tok;
-
- function Bin5 ($room, $table_idx, $table_token) {
- $this->user = array();
- $this->table = array();
-
- $this->the_end = FALSE;
- $this->shm_sz = BIN5_SHM_MIN;
- if (($this->tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1) {
- echo "FTOK FAILED";
- exit;
- }
-
- $user = $room->user;
- $table = $room->table[$table_idx];
-
- log_wr("Bin5 constructor");
-
- for ($i = 0 ; $i < $table->player_n ; $i++) {
- $user[$table->player[$i]]->table_token = $table_token;
- $this->user[$i] = Bin5_user::spawn($user[$table->player[$i]], $table_idx, $i);
- }
- $this->table[0] = Bin5_table::spawn(&$table);
-
- log_main("TABLE_OLD_WIN - Bin5:".$this->table[0]->old_win);
-
- $this->table_idx = $table_idx;
- $this->table_token = $table_token;
- Bin5::garbage_time_expire_set(0);
-
- log_wr("Bin5 constructor end");
- }
-
-
- function get_user($sess, &$idx)
- {
- GLOBAL $PHP_SELF;
-
- if (validate_sess($sess)) {
- for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
- if (strcmp($sess, $this->user[$i]->sess) == 0) {
- // find it
- $idx = $i;
- $ret = &$this->user[$i];
- return ($ret);
- }
- }
- log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
- // for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++)
- // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
- }
- else {
- log_main(sprintf("get_user: Wrong strlen [%s]",$sess));
- }
-
- return (FALSE);
- }
-
-
- function garbage_manager($force)
- {
- GLOBAL $G_base;
-
- /* Garbage collector degli utenti in timeout */
- $ismod = FALSE;
- $curtime = time();
- // externalized if ($force || $this->garbage_timeout < $curtime) {
- if ($force || Bin5::garbage_time_is_expired($curtime)) {
- for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
- $user_cur = $this->user[$i];
- if ($user_cur->sess == "" ||
- ($user_cur->stat == 'table' && ($user_cur->subst == 'shutdowned' || $user_cur->subst == 'shutdowner')))
- continue;
-
- if ($user_cur->lacc + EXPIRE_TIME_RD < $curtime) { // Auto logout dell'utente
- log_rd2($user_cur->sess." bin5 AUTO LOGOUT.");
-
- if ($user_cur->stat == 'table') {
- log_auth($user_cur->sess," bin5 Autologout session.");