X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=7805b2fba22ac72d1ebc0788253b7aeea2de81d9;hb=06dda19a43945c3d204484350ca4bc9eed4e0d47;hp=927f703ed0b9c509851cd21469fa3df945c859c5;hpb=f0c4c4d0bed38d1211249c0032da8e546c5d5df9;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 927f703..7805b2f 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -9,10 +9,17 @@ class Briskin5 { var $step; // current step of the comm array var $garbage_timeout; + var $tok; + function Briskin5 (&$room, $table_idx) { $this->user = array(); $this->table = array(); + if (($this->tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) { + echo "FTOK FAILED"; + exit; + } + $user =& $room->user; $table =& $room->table[$table_idx]; @@ -129,7 +136,9 @@ class Briskin5 { if (($bri = @shm_get_var($shm, $tok)) == FALSE) break; - + + $bri->tok = $tok; + shm_detach($shm); $ret = &$bri; @@ -153,17 +162,17 @@ class Briskin5 { // var_dump($bri); - if (($tok = ftok(FTOK_PATH."/table".$bri->table_idx, "B")) == -1) + if (!isset($bri->tok)) return (FALSE); do { $isacq = TRUE; - if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE) + if (($shm = shm_attach($bri->tok, SHM_DIMS)) == FALSE) break; // log_only($sess, "PUT_VAR DI ".strlen(serialize($bri))); - if (shm_put_var($shm, $tok, $bri) == FALSE) { + if (shm_put_var($shm, $bri->tok, $bri) == FALSE) { log_only($sess, "PUT_VAR FALLITA ".strlen(serialize($bri))); log_only($sess, serialize($bri)); break; @@ -178,6 +187,40 @@ class Briskin5 { return ($ret); } + function destroy_data(&$bri) + { + GLOBAL $sess; + + $ret = FALSE; + $shm = FALSE; + $isacq = FALSE; + + // var_dump($bri); + + if (!isset($bri->tok)) + return (FALSE); + + do { + $isacq = TRUE; + + if (($shm = shm_attach($bri->tok, SHM_DIMS)) == FALSE) + break; + + if (shm_remove($shm) == FALSE) { + log_only($sess, "REMOVE 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; @@ -212,7 +255,138 @@ class Briskin5 { } + function chatt_send(&$user, $mesg) + { + if ($user->stat == 'table') { + $table = &$this->table[$user->table]; + } + + $user_mesg = substr($mesg,6); + + $timecur = time(); + + $dt = date("H:i ", $timecur); + 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->step_inc(); + + return; + } + $user_mesg = "COMMAND ".$user_mesg; + // Search dup name + // change + // update local graph + // update remote graphs + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + $user_cur = &$this->user[$i]; + // if ($user_cur->sess == '' || $user_cur->stat != 'room') + if ($user_cur->sess == '') + continue; + if ($user_cur->name == $name_new) { + $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; + $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s","Nickname %s già in uso.");', $dt.NICKSERV, xcape($name_new)); + $user->step_inc(); + break; + } + } + if ($i == MAX_PLAYERS) { + $user->name = $name_new; + + log_main($user->sess, "chatt_send start set"); + + + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + log_main($user->sess, "chatt_send set loop"); + + $user_cur = &$this->user[$i]; + if ($user_cur->sess == '') + continue; + if ($user_cur->stat == 'room') { + if ($user->stat == 'room' && $user->subst == 'standup') { + $this->standup_update(&$user); + } + else if ($user->stat == 'room' && $user->subst == 'sitdown' || + $user->stat == 'table') { + log_main($user->sess, "chatt_send pre table update"); + + $this->table_update(&$user); + + log_main($user->sess, "chatt_send post table update"); + } + } + else if ($user_cur->stat == 'table' && $user_cur->table == $user->table) { + $table = &$this->table[$user->table]; + + $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))); + if ($user_cur == $user) + $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('$("myname").innerHTML = "%s";', + xcape($user->name,ENT_COMPAT,"UTF-8")); + $user_cur->step_inc(); + } + } + } + } + else { + for ($i = 0 ; $i < ($user->stat == 'room' ? MAX_PLAYERS : PLAYERS_N) ; $i++) { + if ($user->stat == 'room') { + $user_cur = &$this->user[$i]; + if ($user_cur->sess == '' || $user_cur->stat != 'room') + continue; + } + else { + $user_cur = &$this->user[$table->player[$i]]; + } + + $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; + $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('chatt_sub("%s","%s");', + $dt.xcape($user->name), xcape($user_mesg)); + $user_cur->step_inc(); + } + log_legal($timecur, $user->sess, $user->name, + ($user->stat == 'room' ? 'room' : 'table '.$user->table),$user_mesg); + } + } + + function table_wakeup(&$user) + { + $table = &$this->table[0]; + + log_main("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); + + for ($i = 0 ; $i < $table->player_n ; $i++) { + $user_cur = &$this->user[$i]; + log_main("PREIMPOST", "INLOOP name: ".$user_cur->name); + + if ($user_cur == $user) + $user_cur->subst = "shutdowner"; + else + $user_cur->subst = "shutdowned"; + $user_cur->laccwr = $curtime; + + $ret = "gst.st = ".($user_cur->step+1)."; "; + $ret .= 'gst.st_loc++; the_end=true; window.onunload = null; document.location.assign("../index.php");|'; + + log_wr($user_cur->sess, "BRISKIN5_WAKEUP: ".$ret); + $user_cur->comm[$user_cur->step % COMM_N] = $ret; + $user_cur->step_inc(); + } + } + -} +} // end of class Briskin5 ?> \ No newline at end of file