X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=2b1148560049861344f8070469abc925ed95353e;hb=81dfbc8eb6505a1cd82e9b74abf0b15fcf3e2180;hp=84176bba24d56fc2579ea964299601a5f14d10e2;hpb=c14163f1c08c65ecc8f1c4ce9d7c7244a1526a51;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 84176bb..2b11485 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -2,7 +2,7 @@ /* * brisk - brisk.phh * - * Copyright (C) 2006-2007 matteo.nastasi@milug.org + * Copyright (C) 2006-2008 matteo.nastasi@milug.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,10 +19,12 @@ * */ + +define(BRISK_CONF, "brisk.conf.pho"); define(FTOK_PATH, "/var/lib/brisk"); define(LEGAL_PATH, "/tmp/legal_brisk"); define(PROXY_PATH, "/var/lib/brisk_proxy"); -define(TABLES_N, 20); +define(TABLES_N, 24); define(PLAYERS_N, 3); define(MAX_POINTS, 5); define(MAX_PLAYERS, (20 + (PLAYERS_N * TABLES_N))); @@ -30,8 +32,12 @@ define(SHM_DIMS_MIN, (50000 + 10000 * TABLES_N + 15000 * MAX_PLAYERS)); define(SHM_DIMS_MAX, SHM_DIMS_MIN + 1048576); define(SHM_DIMS_DLT, 65536); -define(COMM_N, 12); +define(COMM_N, 18); define(COMM_GEN_N, 50); + +define(CHAT_N, 3); +define(CHAT_ILL_TIME, 6); + define(SESS_LEN, 13); define(STREAM_TIMEOUT, 20); define(EXPIRE_TIME_RD, 180); @@ -39,7 +45,7 @@ define(EXPIRE_TIME_SMAMMA, 360); // BAN_TIME da allineare anche in commons.js define(BAN_TIME, 900); define(GARBAGE_TIMEOUT, 10); -define(NICKSERV, "SERVER"); +define(NICKSERV, "BriskServ"); define(DBG_ONL2, 0x0001); define(DBG_ONLY, 0x0002); @@ -51,6 +57,7 @@ define(DBG_LOCK, 0x0040); define(DBG_WRIT, 0x0080); define(DBG_LOAD, 0x0100); define(DBG_AUTH, 0x0200); +define(DBG_CRIT, 0x0400); define(BRISK_DEBUG, 0); @@ -58,12 +65,15 @@ define(BRISK_SINGLE_DEBUG,0); define(BRISK_SINGLE_SESS, ""); // define(DEBUGGING, "local"); +require_once("$DOCUMENT_ROOT/Etc/".BRISK_CONF); + + $G_false = FALSE; $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "spawn-0.10.1"; +$G_brisk_version = "spawn-0.12.0"; -$root_wellarr = Array ( 'Benvenuto in brisk (Ver. '.$G_brisk_version.'), NOVITA\': dimensionamento dinamico dell\'area dati e ottimizzazione della stessa, versione beta.', +$root_wellarr = Array ( 'Benvenuto in brisk (Ver. '.$G_brisk_version.'), NOVITA\': aggiunta messaggistica a tutti i tavoli - versione beta2.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ); $table_wellarr = Array ( 'Benvenuto al tavolo. Se almeno tre giocatori non sbloccano l\'uscita cliccando il lucchetto, chi esce non può risedersi a un qualunque tavolo per '.floor(BAN_TIME/60).' minuti.'); @@ -491,6 +501,11 @@ class User { var $table_token;// token that identify a game on a table var $the_end; // Flag to change the end of the session + var $chat_lst; // Last chat line + var $chattime; // Array of chat times + var $chat_cur; // Current chat line number + var $chat_ban; // Time for ban chat + var $chat_dlt; // Delta t for ban function User() { } @@ -516,6 +531,12 @@ class User { $thiz->handpt = -1; $thiz->exitislock = TRUE; + $thiz->chattime = array_fill(0, CHAT_N, 0); + $thiz->chat_cur = 0; + $thiz->chat_lst = ""; + $thiz->chat_ban = 0; + $thiz->chat_dlt = 0; + $thiz->table = $table; $thiz->table_pos = -1; $thiz->table_token = ""; @@ -551,6 +572,15 @@ class User { $thiz->asta_pnt = $from->asta_pnt; $thiz->handpt = $from->handpt; $thiz->exitislock = $from->exitislock; + + $thiz->chattime = array(); + for ($i = 0 ; $i < CHAT_N ; $i++) + $thiz->chattime[$i] = $from->chattime[$i]; + $thiz->chat_cur = $from->chat_cur; + $thiz->chat_lst = $from->chat_lst; + $thiz->chat_ban = $from->chat_ban; + $thiz->chat_dlt = $from->chat_dlt; + $thiz->table = $from->table; $thiz->table_pos = $from->table_pos; $thiz->table_token = $from->table_token; @@ -592,6 +622,12 @@ class User { $thiz->exitislock = $from->exitislock; $thiz->the_end = $from->the_end; + $thiz->chattime = array_fill(0, CHAT_N, 0); + $thiz->chat_cur = 0; + $thiz->chat_lst = ""; + $thiz->chat_ban = 0; + $thiz->chat_dlt = 0; + $thiz->table = $table; $thiz->table_pos = $table_pos; $thiz->table_token = $from->table_token; @@ -642,6 +678,16 @@ class User { return (FALSE); } + + function reset() { + $tmp_sess = $this->sess; + $this->sess = ""; + step_unproxy($tmp_sess); + $this->name = ""; + while (array_pop($this->comm) != NULL); + $this->step = 0; + $this->the_end = FALSE; + } } // end class User @@ -777,14 +823,14 @@ class Room { } } // else if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { else if ($no_recovery == FALSE) { - log_main("ERROR: table ".$table_idx." unrecoverable join"); + log_crit("ERROR: table ".$table_idx." unrecoverable join"); for ($i = 0 ; $i < $table_cur->player_n ; $i++) { $user_cur = &$this->user[$table_cur->player[$i]]; $user_cur->subst = "shutdowner"; $user_cur->step_inc(); - $ret = sprintf('stat = "%s"; subst = "%s";', $cur_user->stat, $cur_user->subst); + $ret = sprintf('stat = "%s"; subst = "%s";', $user_cur->stat, $user_cur->subst); $ret .= "gst.st = ".($user_cur->step+1)."; "; $ret .= show_notify("
I dati del tavolo n° ".$user_cur->table." sono inconsistenti, verranno resettati.

Torni in piedi.

", 2000, "Chiudi.", 400, 110); $user_cur->comm[$user_cur->step % COMM_N] = $ret; @@ -817,12 +863,16 @@ class Room { if ($user_cur->stat == 'table' || $user_cur->stat == 'room') { log_auth($user_cur->sess, "Autologout session."); + $user_cur->reset(); + /* factorized with ->reset() $tmp_sess = $user_cur->sess; $user_cur->sess = ""; step_unproxy($tmp_sess); $user_cur->name = ""; + while (array_pop($user_cur->comm) != NULL); $user_cur->step = 0; $user_cur->the_end = FALSE; + */ log_rd2("AUTO LOGOUT."); if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table') @@ -1004,7 +1054,9 @@ class Room { if ($tab_idx < $user_tab_n) { log_main("PRE show_room username: ".$user_cur->name." STEP: ".$user_cur->step); - while (array_pop($user_cur->comm) != NULL); +// ARRAY_POP DISABLED +// if ($trans_delta == 0) +// while (array_pop($user_cur->comm) != NULL); $user_cur->trans_step = $user_cur->step + 1 + $trans_delta; $user_cur->comm[$user_cur->step % COMM_N] = ""; @@ -1101,16 +1153,79 @@ class Room { function chatt_send(&$user, $mesg) { - if ($user->stat == 'table') { - $table = &$this->table[$user->table]; - } + GLOBAL $G_alarm_passwd; + $only_you = FALSE; - $user_mesg = substr($mesg,6); +// 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) { + if (strncmp($user_mesg, "/alarm ", 7) == 0) { + $alarm_check = "/alarm ".$G_alarm_passwd." "; + if (strncmp($user_mesg, $alarm_check, strlen($alarm_check)) != 0) + return; + + $user_mesg = "
".$dt.NICKSERV."

".xcape(substr($user_mesg, strlen($alarm_check)))."


"; + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + $user_cur = &$this->user[$i]; + // if ($user_cur->sess == '' || $user_cur->stat != 'room') + if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user_cur == $user) + continue; + + $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.NICKSERV, xcape($user_mesg)); + + + $user_cur->comm[$user_cur->step % COMM_N] .= show_notify($user_mesg, 0, "chiudi", 400, 120); + $user_cur->step_inc(); + } + + + // Before all align times with table timeout + for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { + $table_cur =& $this->table[$table_idx]; + // if the table is complete and exists its shared mem we get the info about users lacc + + if ($table_cur->player_n == PLAYERS_N) { + log_main("PLAYERS == N TABLE ".$table_idx); + + if (($sem = Briskin5::lock_data($table_idx)) != FALSE) { + log_main("bin5 lock data success"); + + $no_recovery = FALSE; + if (($bri = &Briskin5::load_data($table_idx)) != FALSE) { + if ($table_cur->table_token != $bri->table_token) { + log_main("ERROR: not matching table_token. Room: ".$table_cur->table_token." Table: ".$bri->table_token); + $bri = FALSE; + } + } + + if ($bri != FALSE) { + $bri_table = &$bri->table[0]; + for ($i = 0 ; $i < $bri_table->player_n ; $i++) { + // stat must be "table" by definition + $bri_user =& $bri->user[$i]; + + log_main("writa: ".$user_mesg); + $bri_user->comm[$bri_user->step % COMM_N] = "gst.st = ".($bri_user->step+1)."; "; +// $bri_user->comm[$bri_user->step % COMM_N] .= sprintf('chatt_sub("%s","%s");', +// $dt.NICKSERV, xcape($user_mesg)); + $bri_user->comm[$bri_user->step % COMM_N] .= show_notify($user_mesg, 0, "chiudi", 400, 120); + $bri_user->step_inc(); + } + Briskin5::save_data(&$bri); + } + Briskin5::unlock_data($sem); + } // bri::lock_data + } // if ($table_cur->player_n == PLAYERS_N) { + } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { + } + else if (strncmp($user_mesg, "/nick ", 6) == 0) { log_main("chatt_send BEGIN"); if (($name_new = validate_name(substr($user_mesg, 6))) == FALSE) { @@ -1153,8 +1268,7 @@ class Room { if ($user->stat == 'room' && $user->subst == 'standup') { $this->standup_update(&$user); } - else if ($user->stat == 'room' && $user->subst == 'sitdown' || - $user->stat == 'table') { + else if ($user->stat == 'room' && $user->subst == 'sitdown') { log_main("chatt_send pre table update"); $this->table_update(&$user); @@ -1162,34 +1276,56 @@ class Room { log_main("chatt_send post table update"); } } - else if ($user_cur->stat == 'table' && $user_cur->table == $user->table) { - $table = &$this->table[$user->table]; +// 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(); - } +// $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 { + if ($timecur < ($user->chat_ban + $user->chat_dlt)) { + $only_you = TRUE; + $user->chat_dlt = $user->chat_dlt * 2; + if ($user->chat_dlt > 120) + $user->chat_dlt = 120; + } + else if ($user->chat_lst == $user_mesg) + $only_you = TRUE; + else if ($timecur - $user->chattime[($user->chat_cur + 1) % CHAT_N] < CHAT_ILL_TIME) { + $user->chat_ban = $timecur; + $user->chat_dlt = 5; + $only_you = TRUE; + } + else { + $user->chat_ban = 0; + $user->chat_dlt = 0; + } + 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]]; - } + + if ($only_you) { + if ($user_cur != $user) + continue; + else + $user_mesg = "== chat ban =="; + } $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");', @@ -1198,6 +1334,10 @@ class Room { } log_legal($timecur, $user->sess, $user->name, ($user->stat == 'room' ? 'room' : 'table '.$user->table),$user_mesg); + + $user->chat_lst = "$user_mesg"; + $user->chattime[$user->chat_cur % CHAT_N] = $timecur; + $user->chat_cur++; } } @@ -1471,6 +1611,26 @@ function log_only2($log) { } } +function log_crit($log) { + GLOBAL $sess; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 0) + return; + + if (isset($sess) == FALSE) + $ssess = "XXXX"; + else + $ssess = $sess; + + if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0) + return; + + if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) { + fwrite($fp, sprintf("CRIT: [%s] [%s]\n", $ssess, $log)); + fclose($fp); + } +} + function log_only($log) { GLOBAL $sess; @@ -1952,8 +2112,11 @@ function root_wellcome($user) GLOBAL $root_wellarr; $ret = ""; + $timecur = time(); + $dt = date("H:i ", $timecur); + for ($i = 0 ; $i < count($root_wellarr) ; $i++) - $ret .= sprintf('chatt_sub("ChanServ: ","%s");', str_replace('"', '\"', $root_wellarr[$i])); + $ret .= sprintf('chatt_sub("%s","%s");', $dt.NICKSERV, str_replace('"', '\"', $root_wellarr[$i])); return ($ret); }