From: Matteo Nastasi (mop) Date: Wed, 1 Mar 2017 17:41:26 +0000 (+0100) Subject: refactored continue_match function X-Git-Tag: v5.4.1~18 X-Git-Url: https://mop.ddnsfree.com/gitweb/?p=brisk.git;a=commitdiff_plain;h=fdcd2271540f3e2d18886aaa413ae17ec2d131ec refactored continue_match function --- diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 91fb9c7..faf8c1b 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -503,6 +503,11 @@ class Bin5_table extends Table { $curtime = time(); do { + if ($this->match_id != -1) { + $msg = sprintf("Stai già giocando la partita con codice %d.", $this->match_id); + break; + } + /* - verify if match_id and user are both valid to accept the match_continue request - */ $match_id = (int)$match_id_s; @@ -511,11 +516,6 @@ class Bin5_table extends Table { break; } - if ($user->continue_get() == BIN5_USER_CONTINUE_ALREADY) { - $msg = "Hai già richiesto di continuare una partita."; - break; - } - if ($user->continue_get() == $match_id) { $msg = "Hai già richiesto di continuare questa partita."; break; @@ -541,20 +541,155 @@ class Bin5_table extends Table { /* - the user is in the list, add the match_id to his profile and check if he is the N'th to require continue - */ + $continue_tot = 0; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + + if ($user == $user_cur) { + $continue_tot += 1; + continue; + } + + if ($user_cur->continue_get() == BIN5_USER_CONTINUE_INIT) + continue; + + if ($user_cur->continue_get() != $match_id) + break; + $continue_tot += 1; + } + if ($i < BIN5_PLAYERS_N) { + $msg = sprintf("L'utente %s voleva già continuare la partita n° %d.", + xcape($user_cur->name), $user_cur->continue_get()); + break; + } + // set the match_id for the current user $user->continue_set($match_id); + $ret = TRUE; + // not all players set the continue match than we exit + if ($continue_tot < BIN5_PLAYERS_N) { + $msg = sprintf("L'utente %s vorrebbe continuare la partita n° %d.", + xcape($user->name), $match_id); + break; + } + + /* - all users decide to continue the same match, update all infos and rearrange users + to the right positions on the table - */ + + /* reset users table order */ + for ($i = 0 ; $i < BIN5_PLAYERS_N - 1 ; $i++) { + if ($bri->user[$this->player[$i]]->code == $ucodes[$i]) { + continue; + } + for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) { + if ($bri->user[$this->player[$e]]->code == $ucodes[$i]) { + $swap = $this->player[$i]; + $this->player[$i] = $this->player[$e]; + $this->player[$e] = $swap; + $bri->user[$this->player[$i]]->table_pos = $i; + $bri->user[$this->player[$e]]->table_pos = $e; + } + } + } + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + fprintf(STDERR, "USERZ: [%s]\n", $bri->user[$this->player[$i]]->name); + } + + // update database info to be aligned with current table (ttok and table_idx + if (($bdb = BriskDB::create()) != FALSE) { + if ($bdb->match_continue($match_id, $this, $user->table_orig) == FALSE) { + unset($bdb); + $msg = "aggiornamento dei dati della partita fallito"; + break; + } + unset($bdb); + } + + /* update rules engine */ + $rules_name = rules_id2name($match_data['tcode']); + $this->rules = new $rules_name($this); + + /* bunch and multiplier status set */ + $this->mazzo = $match_data['mazzo_next']; + $this->mult = $match_data['mult_next']; + $this->match_id = $match_id; + $this->game_init(&$bri->user); + + /* reload of the page with the new layout */ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$this->player[$i]]; - if ($user_cur->continue_get() != $match_id) { + $user_cur->continue_set(BIN5_USER_CONTINUE_INIT); + + $user_cur->trans_step = $user_cur->step + 1; + $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("index.php");|', $user_cur->step+1); + $user_cur->step_inc(); + + // a void command force xynt-streamer to flush all data to client + $user_cur->trans_step = $user_cur->step + 1; + $user_cur->comm[$user_cur->step % COMM_N] = ""; + $user_cur->step_inc(); + + $user_cur->comm[$user_cur->step % COMM_N] = show_table(&$bri, &$user_cur, $user_cur->step+1, TRUE, FALSE); + $user_cur->step_inc(); + } + return (TRUE); + } while (FALSE); + + $dt = date("H:i ", $curtime); + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + if ($ret == FALSE && $this->player[$i] != $user->idx) + continue; + $user_cur = &$bri->user[$this->player[$i]]; + $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; + $user_cur->comm[$user_cur->step % COMM_N] .= nickserv_msg($dt, $msg); + $user_cur->step_inc(); + } + } + + function rules_change(&$bri, $user, $rules_code_s) + { + // + // Rules: update version following loaded tcode + // + $ret = FALSE; + $curtime = time(); + + do { + /* - verify if match_id and user are both valid to accept + the match_continue request - */ + $rules_id = (int)$match_code_s; + // FIXME: from dynamic rules list + if ($rules_id != 1 && $rules_id != 2 && $rules_id != 4) { + $msg = "queste regole non esistono o non sono attive"; + break; + } + + if ($this->match_id != -1) { + $msg = "Non si possono cambiare regole dopo che si è già ultimata una mano."; + break; + } + + // set the match_id for the current user + $user->rules_set($rules_id); + + // XXXXXXXXXXX + $tot_sel_rules = 0; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + if ($bri->user[$this->player[$i]]->rules_get() == BIN5_USER_RULES_INIT) { + continue; + } + + if ($bri->user[$this->player[$i]]->rules_get() != $rules_id) { break; } + $tot_sel_rules++; } $ret = TRUE; // not all players set the continue match than we exit if ($i < BIN5_PLAYERS_N) { - $msg = sprintf("L'utente %s vorrebbe continuare la partita n° %d.", - xcape($user->name), $match_id); + $msg = sprintf("L'utente %s vorrebbe utilizzare le %s.", + xcape($user->name), xcape(rules_id2descr($rules_id))); break; } @@ -638,7 +773,7 @@ class Bin5_table extends Table { define('BIN5_USER_FLAG_RING_ENDAUCT', 0x01); define('BIN5_USER_CONTINUE_INIT', -1); -define('BIN5_USER_CONTINUE_ALREADY', -2); + class Bin5_user extends User { var $asta_card; // var $asta_pnt; //