X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=c1c0f5b8e130c70f2c2c8cac4ba1ded1a00cea78;hb=29ef3f7db6bc1d39c658a15d95d22e45bbd59c16;hp=bfaddf432faf6fb1cc85a6649284233930c4bc21;hpb=1f5795fd45dcccc42e794089d14350c6b5c5fecd;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index bfaddf4..c1c0f5b 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -1,7 +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; } @@ -123,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, BRISKIN5_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) @@ -159,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, BRISKIN5_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, BRISKIN5_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; } @@ -248,12 +255,12 @@ class Briskin5 { log_wr("LOCK_DATA ".FTOK_PATH."/table".$table_idx); // echo "LOCK: ".FTOK_PATH."/main"; // exit; - // FIXME monitor this step + // WARNING monitor this step if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { echo "FTOK FAILED"; exit; } - // FIXME monitor this step + // WARNING monitor this step if (($res = @sem_get($tok)) == FALSE) { echo "SEM_GET FAILED"; exit; @@ -286,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; @@ -375,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); } } @@ -453,4 +460,4 @@ function locshm_exists($tok) } -?> \ No newline at end of file +?>