X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=c1c0f5b8e130c70f2c2c8cac4ba1ded1a00cea78;hb=29ef3f7db6bc1d39c658a15d95d22e45bbd59c16;hp=283e398b0a06eb84f4d96dfb518ea9ef5dbd44d7;hpb=094ceeb2b4059cd147b1d77a3010a974f301df01;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 283e398..c1c0f5b 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -1,5 +1,10 @@ user = array(); $this->table = array(); $this->the_end = FALSE; - - if (($this->tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { + $this->shm_sz = BRISKIN5_SHM_MIN; + if (($this->tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { echo "FTOK FAILED"; exit; } @@ -49,7 +55,7 @@ class Briskin5 { GLOBAL $PHP_SELF, $G_false; if (validate_sess($sess)) { - for ($i = 0 ; $i < MAX_BRISKIN5_PLAYERS ; $i++) { + for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) { if (strcmp($sess, $this->user[$i]->sess) == 0) { // find it $idx = $i; @@ -58,7 +64,7 @@ class Briskin5 { } } log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF)); - // for ($i = 0 ; $i < MAX_PLAYERS ; $i++) + // for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess)); } else { @@ -77,7 +83,7 @@ class Briskin5 { $curtime = time(); if ($force || $this->garbage_timeout < $curtime) { - for ($i = 0 ; $i < MAX_BRISKIN5_PLAYERS ; $i++) { + for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) { $user_cur = &$this->user[$i]; if ($user_cur->sess == "" || ($user_cur->stat == 'table' && ($user_cur->subst == 'shutdowned' || $user_cur->subst == 'shutdowner'))) @@ -121,20 +127,24 @@ class Briskin5 { function &load_data($table_idx, $table_token = "") { GLOBAL $G_false, $sess; + $doexit = FALSE; $shm = FALSE; log_wr("TABLE_IDX ".FTOK_PATH."/table".$table_idx); - if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { - echo "FTOK FAILED"; - exit; - } do { - // if (shmchk_exists($tok) == FALSE) - if (locshm_exists($tok) == FALSE) + if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { + log_main("ftok failed"); + $doexit = TRUE; break; + } - if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE) + if (($shm_sz = sharedmem_sz($tok)) == -1) { + log_main("shmop_open failed"); + break; + } + + if (($shm = shm_attach($tok, $shm_sz)) == FALSE) break; if (($bri = @shm_get_var($shm, $tok)) == FALSE) @@ -157,72 +167,71 @@ class Briskin5 { shm_detach($shm); log_wr("briskin5 load_data failed"); + if ($doexit) + exit(); return ($G_false); } + function save_data(&$bri) { GLOBAL $sess; $ret = FALSE; $shm = FALSE; - $isacq = FALSE; log_main("SAVE BRISKIN5 DATA"); - // var_dump($bri); if (!isset($bri->tok)) return (FALSE); - do { - $isacq = TRUE; - - if (($shm = shm_attach($bri->tok, SHM_DIMS)) == FALSE) + while ($bri->shm_sz < BRISKIN5_SHM_MAX) { + if (($shm = shm_attach($bri->tok, $bri->shm_sz)) == FALSE) break; - // log_only("PUT_VAR DI ".strlen(serialize($bri))); - if (shm_put_var($shm, $bri->tok, $bri) == FALSE) { - log_only("PUT_VAR FALLITA ".strlen(serialize($bri))); - log_only(serialize($bri)); + if (@shm_put_var($shm, $bri->tok, $bri) != FALSE) { + shm_detach($shm); + return (TRUE); + } + if (shm_remove($shm) === FALSE) { + log_only("REMOVE FALLITA"); break; } - // log_main("QUI CI ARRIVA [".$bri->user[0]->name."]"); - $ret = TRUE; - } while (0); - + shm_detach($shm); + $bri->shm_sz += BRISKIN5_SHM_DLT; + } + + log_crit("save data failed!"); + if ($shm) shm_detach($shm); return ($ret); } + + function destroy_data($table_idx) { GLOBAL $sess; $ret = FALSE; $shm = FALSE; - $isacq = FALSE; - log_main("DESTROY BRISKIN5 DATA"); - do { - $isacq = TRUE; - log_main("DESTROY2 BRISKIN5 DATA"); - if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) + if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) break; - if (($shm = shm_attach($tok, SHM_DIMS)) === FALSE) + if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE) break; - if (shm_remove($shm) === FALSE) { - log_only("REMOVE FALLITA ".strlen(serialize($bri))); - log_only(serialize($bri)); + if (shmop_delete($shm) == 0) { + log_only("REMOVE FALLITA "); break; } @@ -246,12 +255,13 @@ class Briskin5 { log_wr("LOCK_DATA ".FTOK_PATH."/table".$table_idx); // echo "LOCK: ".FTOK_PATH."/main"; // exit; - if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { + // WARNING monitor this step + if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { echo "FTOK FAILED"; exit; } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { + // WARNING monitor this step + if (($res = @sem_get($tok)) == FALSE) { echo "SEM_GET FAILED"; exit; } @@ -283,15 +293,15 @@ class Briskin5 { $user_mesg = substr($mesg,6); - $timecur = time(); + $curtime = time(); - $dt = date("H:i ", $timecur); + $dt = date("H:i ", $curtime); if (strncmp($user_mesg, "/nick ", 6) == 0) { log_main($user->sess." chatt_send BEGIN"); if (($name_new = validate_name(substr($user_mesg, 6))) == FALSE) { $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; - $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s","Il nickname deve contenere almeno una lettera o una cifra.");', $dt.NICKSERV, xcape($name_new)); + $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s","Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.");', $dt.NICKSERV); $user->step_inc(); return; @@ -301,7 +311,7 @@ class Briskin5 { // change // update local graph // update remote graphs - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) { $user_cur = &$this->user[$i]; // if ($user_cur->sess == '' || $user_cur->stat != 'room') if ($user_cur->sess == '') @@ -313,13 +323,13 @@ class Briskin5 { break; } } - if ($i == MAX_PLAYERS) { + if ($i == BRISKIN5_MAX_PLAYERS) { $user->name = $name_new; log_main($user->sess." chatt_send start set"); - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) { log_main($user->sess." chatt_send set loop"); $user_cur = &$this->user[$i]; @@ -343,11 +353,11 @@ class Briskin5 { $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('set_names(" %s", " %s", " %s", " %s", " %s"); ', - xcape($this->user[$table->player[($user_cur->table_pos)%PLAYERS_N]]->name), - xcape($this->user[$table->player[($user_cur->table_pos+1)%PLAYERS_N]]->name), - xcape($this->user[$table->player[($user_cur->table_pos+2)%PLAYERS_N]]->name), - (PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3)%PLAYERS_N]]->name)), - (PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4)%PLAYERS_N]]->name))); + xcape($this->user[$table->player[($user_cur->table_pos) % BRISKIN5_PLAYERS_N]]->name), + xcape($this->user[$table->player[($user_cur->table_pos+1) % BRISKIN5_PLAYERS_N]]->name), + xcape($this->user[$table->player[($user_cur->table_pos+2) % BRISKIN5_PLAYERS_N]]->name), + (BRISKIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3) % BRISKIN5_PLAYERS_N]]->name)), + (BRISKIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4) % BRISKIN5_PLAYERS_N]]->name))); if ($user_cur == $user) $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('$("myname").innerHTML = "%s";', xcape($user->name,ENT_COMPAT,"UTF-8")); @@ -357,7 +367,7 @@ class Briskin5 { } } else { - for ($i = 0 ; $i < ($user->stat == 'room' ? MAX_PLAYERS : PLAYERS_N) ; $i++) { + for ($i = 0 ; $i < ($user->stat == 'room' ? BRISKIN5_MAX_PLAYERS : BRISKIN5_PLAYERS_N) ; $i++) { if ($user->stat == 'room') { $user_cur = &$this->user[$i]; if ($user_cur->sess == '' || $user_cur->stat != 'room') @@ -372,7 +382,7 @@ class Briskin5 { $dt.xcape($user->name), xcape($user_mesg)); $user_cur->step_inc(); } - log_legal($timecur, $user->sess, $user->name, + log_legal($curtime, $user->sess, $user->name, ($user->stat == 'room' ? 'room' : 'table '.$user->table),$user_mesg); } } @@ -429,13 +439,13 @@ class Briskin5 { return ($is_ab); } -} // end of class Briskin5 +} // end class Briskin5 function locshm_exists($tok) { // return (TRUE); - if (($id = shmop_open($tok,"a", 0, 0)) == FALSE) { + if (($id = @shmop_open($tok,"a", 0, 0)) == FALSE) { log_main($tok." SHM NOT exists"); return (FALSE); @@ -450,4 +460,4 @@ function locshm_exists($tok) } -?> \ No newline at end of file +?>