From: Matteo Nastasi (mop) Date: Sun, 3 Nov 2013 08:57:52 +0000 (+0100) Subject: Merge branch 'tournaments' X-Git-Tag: v4.10.0 X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=commitdiff_plain;h=536da22ebde5fa66e0f7524e9efc0316391f1afd;hp=8424edb7bf9e5d66cd820b8c7ad9ca0575459e5f;p=brisk.git Merge branch 'tournaments' --- diff --git a/INSTALL.sh b/INSTALL.sh index b021de5..4f96382 100755 --- a/INSTALL.sh +++ b/INSTALL.sh @@ -6,6 +6,7 @@ CONFIG_FILE="$HOME/.brisk_install" apache_conf="/etc/apache2/sites-available/default" +card_hand=3 players_n=3 tables_n=44 tables_auth_n=12 @@ -29,12 +30,13 @@ function usage () { echo "$1 -h" echo "$1 chk - run lintian on all ph* files." echo "$1 pkg - build brisk packages." - echo "$1 [-W] [-n 3|5] [-t <(n>=4)>] [-T ] [-A ] [-a ] [-f ] [-p ] [-U ] [-u ] [-d ] [-w ] [-k ] [-l ] [-y ] [-P ]" + echo "$1 [-W] [-n 3|5] [-c 3|8] [-t <(n>=4)>] [-T ] [-A ] [-a ] [-f ] [-p ] [-U ] [-u ] [-d ] [-w ] [-k ] [-l ] [-y ] [-P ]" echo " -h this help" echo " -f use this config file" echo " -p save preferences in the file" echo " -W web files only" echo " -A apache_conf - def. $apache_conf" + echo " -c number cards in hand - def. $card_hand" echo " -n number of players - def. $players_n" echo " -t number of tables - def. $tables_n" echo " -T number of auth-only tables - def. $tables_auth_n" @@ -135,6 +137,7 @@ while [ $# -gt 0 ]; do -A*) apache_conf="$(get_param "-A" "$1" "$2")"; sh=$?;; -f*) conffile="$(get_param "-f" "$1" "$2")"; sh=$?;; -p*) outconf="$(get_param "-p" "$1" "$2")"; sh=$?;; + -c*) card_hand="$(get_param "-c" "$1" "$2")"; sh=$?;; -n*) players_n="$(get_param "-n" "$1" "$2")"; sh=$?;; -t*) tables_n="$(get_param "-t" "$1" "$2")"; sh=$?;; -T*) tables_auth_n="$(get_param "-T" "$1" "$2")"; sh=$?;; @@ -168,8 +171,9 @@ done # echo " outconf: \"$outconf\"" echo " apache_conf:\"$apache_conf\"" +echo " card_hand: $card_hand" echo " players_n: $players_n" -echo " tables_n: $tables_n" +echo " tables_n: $tables_n" echo " tables_auth_n: $tables_auth_n" echo " brisk_auth_conf: \"$brisk_auth_conf\"" echo " brisk_debug:\"$brisk_debug\"" @@ -189,6 +193,7 @@ if [ ! -z "$outconf" ]; then echo "# Produced automatically by brisk::INSTALL.sh" echo "#" echo "apache_conf=$apache_conf" + echo "card_hand=$card_hand" echo "players_n=$players_n" echo "tables_n=$tables_n" echo "tables_auth_n=$tables_auth_n" @@ -249,6 +254,11 @@ IFS=' # ftokk_path="${ftok_path}k" +if [ $card_hand -lt 3 -o $card_hand -gt 8 ]; then + echo "card_hand ($card_hand) out of range (3 <= c <= 8)" + exit 1 +fi + if [ $players_n -ne 3 -a $players_n -ne 5 ]; then echo "players_n ($players_n) out of range (3|5)" exit 1 @@ -332,6 +342,7 @@ else fi # .js substitutions +sed -i "s/CARD_HAND *= *[0-9]\+/CARD_HAND = $card_hand/g" $(find ${web_path}__ -type f -name '*.js' -exec grep -l 'CARD_HAND *= *[0-9]\+' {} \;) sed -i "s/PLAYERS_N *= *[0-9]\+/PLAYERS_N = $players_n/g" $(find ${web_path}__ -type f -name '*.js' -exec grep -l 'PLAYERS_N *= *[0-9]\+' {} \;) sed -i "s/^var G_send_time *= *[0-9]\+/var G_send_time = $send_time/g" $(find ${web_path}__ -type f -name '*.js' -exec grep -l '^var G_send_time *= *[0-9]\+' {} \;) @@ -339,6 +350,8 @@ sed -i "s/^var G_send_time *= *[0-9]\+/var G_send_time = $send_time/g" $(find ${ # .ph[pho] substitutions sed -i "s/define *( *'PLAYERS_N', *[0-9]\+ *)/define('PLAYERS_N', $players_n)/g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'PLAYERS_N', *[0-9]\+ *)" {} \;) +sed -i "s/define *( *'BIN5_CARD_HAND', *[0-9]\+ *)/define('BIN5_CARD_HAND', $card_hand)/g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'BIN5_CARD_HAND', *[0-9]\+ *)" {} \;) + sed -i "s/define *( *'BIN5_PLAYERS_N', *[0-9]\+ *)/define('BIN5_PLAYERS_N', $players_n)/g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'BIN5_PLAYERS_N', *[0-9]\+ *)" {} \;) sed -i "s@define *( *'FTOK_PATH',[^)]*)@define('FTOK_PATH', \"$ftok_path\")@g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'FTOK_PATH',[^)]*)" {} \;) diff --git a/TODO.txt b/TODO.txt index fd9ece4..56908c4 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,6 +3,23 @@ FEATURES | ----------+ + WIP - CONTINUE FEATURE + . replace explicit strings with multilanguage array + + DONE . save points every game + DONE . modify points calculation to include order and mazzo + DONE . exclude not standard types from statistics + DONE . daily reports (1 for each active tournament) + DONE . monthly stats (for normal match only) + + DONE . show current match ID when created + DONE . add info about continue to the info page + DONE . add command to continue + DONE . check consistency of the request + DONE . rearrange users and game status to continue the selected match + + DONE . investigate user reordering ?? + - WEBSOCKET TRANSPORT . refactoring $enc attribute management DONE . reintroduced $enc = 'plain' for websocket diff --git a/bin/3fire.sh b/bin/3fire.sh new file mode 100755 index 0000000..f2ba79d --- /dev/null +++ b/bin/3fire.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# set -x +declare -a coor pids +coor[0]="0,0,0,560,650" +coor[1]="0,443,108,560,650" +coor[2]="0,878,197,560,650" + + +# TODO: pids2wids function IN: pids OUT: associated windows ids + +ffox () { + if [ "$1" = "-v" ]; then + ps ax | egrep '[0-9] /usr/lib/firefox/firefox -no-remote -P (one|two|three) ' | grep -v grep | sed 's/^ *//g;s/ .*-P//g;s/ http.*//g' + else + ps ax | egrep '[0-9] /usr/lib/firefox/firefox -no-remote -P (one|two|three) ' | grep -v grep | sed 's/^ *//g;s/ .*//g' + fi +} + +rearrange_windows () { + ct=0 + while true; do + sleep 1 + wids="$(wmctrl -l -p | sed 's/ \+/|/g' | cut -d '|' -f 1,3 | egrep "\|(${pids[0]}|${pids[1]}|${pids[2]})$")" + l="$(echo "$wids" | wc -l)" + if [ $l -eq 3 ]; then + for i in $(seq 0 2); do + wid="$(echo "$wids" | grep "|${pids[$i]}\$" | cut -d '|' -f 1)" + wmctrl -i -r $wid -e ${coor[$i]} + echo wmctrl out: $? + done + break + fi + ct=$((ct + 1)) + if [ $ct -gt 10 ]; then + break + fi + done +} + +# +# MAIN +# +HOMEPAGE="http://dodo.birds.van/brisk/index.php" +if [ "$1" = "help" -o "$1" = "-h" -o "$1" = "--help" ]; then + echo "$0 - run firefoxes" + echo "$0 list [-v] - list firefoxes" + echo "$0 - send signal to firefoxes" + echo "$0 help - this help" +elif [ "$1" = "list" ]; then + ffox $2 +elif [ "$1" = "stop" -o "$1" = "cont" -o "$1" = "term" -o "$1" = "kill" ]; then + case "$1" in + stop) sig=-STOP ;; + cont) sig=-CONT ;; + term) sig=-TERM ;; + kill) sig=-KILL ;; + esac + + kill $sig $(ffox) +elif [ "$1" = "rearrange" ]; then + list="$($0 list -v)" + declare -a pids + ct=0 + for i in one two three; do + pids[$ct]="$(echo "$list" | grep -- " $i$" | sed 's/ .*//g')" + ct=$((ct + 1)) + done + rearrange_windows +elif [ $# -eq 0 ]; then + ct=0 + for i in one two three; do + firefox -no-remote -P $i "$HOMEPAGE?whoami=$i" & + pd="$!" + echo "$i: $pd" + pids[$ct]="$pd" + ct=$((ct + 1)) + done + + rearrange_windows +fi diff --git a/bin/tagger.sh b/bin/tagger.sh index b272a98..a0b93e0 100755 --- a/bin/tagger.sh +++ b/bin/tagger.sh @@ -1,2 +1,3 @@ #!/bin/bash -etags -l php $(find -name '*.ph*') \ No newline at end of file +etags -l php $(find -name '*.ph*') + diff --git a/doc/ARCHITECTURE.txt b/doc/ARCHITECTURE.txt index 45d7c24..d074067 100644 --- a/doc/ARCHITECTURE.txt +++ b/doc/ARCHITECTURE.txt @@ -1,5 +1,25 @@ Sparse documentation about Brisk. +==== brisk/table/user relationships ==== + +=== in the room === + +// when standup +bri->user[user_idx] = user +user->idx = user_idx +user->idx_orig = user_idx + +// when sitdown +table->player[player_idx] = user_idx +user->table_pos = player_idx + +=== in the game === + +bin5->user[user_idx] = user +table->player[player_idx] = user_idx +user->table_pos = player_idx + + Many things aren't documented at all, but I start with authentication workflow. ==== MODIFY USERS TABLE ==== @@ -45,3 +65,10 @@ index.php: - align many status var with briskin5 user values - room_join_wakeup() +==== Chunk flow ==== + + +$ret = $user->maincheck($old_stat, $old_subst, $old_step, $this->rd_stat, $this->rd_subst, $this->rd_step, + $splashdate, $table_idx, $table_token)) +$user->rd_transp->chunk($this->rd_scristp++, $ret); + diff --git a/sql/builder.sh b/sql/builder.sh index 2a02633..83843d3 100755 --- a/sql/builder.sh +++ b/sql/builder.sh @@ -1,8 +1,83 @@ #! /bin/bash # -# all this part is from mopshop and we will use it to construct the brisk database +# functions +usage () { + echo " USAGE" + echo " ./builder [-d|--dryrun] [-a|--allfiles] [-s|--short] ..." + echo " ./builder <-h|--help|help>" + echo " commands are:" + echo " create" + echo " destroy" + echo " clean" + echo " build" + echo " rebuild" + echo " psql" + echo " piped" + echo " add [ [..]]" + echo " del [ [..]]" + echo " dump [dumpfile]" + echo " dumpall [dumpfile]" + echo " all" + exit $1 +} + +sqlexe () { + local sht + sht=$1 + + if [ "$SHORT" = "y" ]; then + sed "s/#PFX#/$PFX/g" | psql -a $pg_args 2>&1 | egrep 'ERROR|^-- MESG' + else + sed "s/#PFX#/$PFX/g" | psql -a $pg_args + fi + + return 0 +} + +one_or_all() { + if [ "$ALL_FILES" = "y" ]; then + sfx_files='*' + else + sfx_files='*.sql' + fi + + if [ "$1" = "" ]; then + cat sql.d/$sfx_files + else + cat "$1" + fi +} + # +# MAIN +# + +CMD=$1 +shift + +while [ $# -gt 0 ]; do + case $1 in + -d|--dryrun) + DRY_RUN=y + psql () { + echo "MOCKPSQL params: $@" + cat + } + ;; + -a|--allfiles) + ALL_FILES=y + ;; + -s|--short) + SHORT=y + ;; + *) + break + ;; + esac + shift +done + if [ -f $HOME/.brisk-db.conf ]; then source $HOME/.brisk-db.conf elif [ -f $HOME/.db.conf ]; then @@ -25,84 +100,63 @@ test "$DBHOST" != "" && pg_args="$pg_args -h $DBHOST" test "$DBUSER" != "" && pg_args="$pg_args -U $DBUSER" test "$DBPORT" != "" && pg_args="$pg_args -p $DBPORT" test "$DBBASE" != "" && pg_args="$pg_args $DBBASE" - -sqlexe () { - local sht - sht=$1 - - if [ $sht -eq 1 ]; then - sed "s/#PFX#/$PFX/g" | psql -a $pg_args 2>&1 | egrep 'ERROR|^-- MESG' - else - sed "s/#PFX#/$PFX/g" | psql -a $pg_args - fi - return 0 -} +MATCH_DROP='^drop|^alter table.* drop ' -one_or_all() { - if [ "$1" = "" ]; then - cat sql.d/*.sql - else - cat "$1" - fi -} +case $CMD in + "create") + echo "su root" + su root -c "su postgres -c \"echo \\\"DBUser passwd: $DBPASS\\\" ; createuser -S -D -R -P $DBUSER && createdb -E utf8 -O $DBUSER $DBBASE\"" + ;; -# -# MAIN -# -sht=0 + "destroy") + echo "su root" + su root -c "su postgres -c \"dropdb $DBBASE && dropuser $DBUSER\"" + ;; + "clean") + ( echo "-- MESG: clean start" ; one_or_all $2 | egrep -i "$MATCH_DROP" | tac ; echo "-- MESG: clean end" ; ) | sqlexe + ;; + "build") + ( echo "-- MESG: build start" ; one_or_all $2 | egrep -iv "$MATCH_DROP" ; echo "-- MESG: build end" ; ) | sqlexe + ;; + "rebuild") + ( echo "-- MESG: clean start" ; one_or_all $2 | egrep -i "$MATCH_DROP" | tac ; echo "-- MESG: clean end" ; \ + echo "-- MESG: build start" ; one_or_all $2 | egrep -iv "$MATCH_DROP" ; echo "-- MESG: build end" ; ) \ + | sqlexe + ;; + "psql") + psql $pg_args $@ + ;; -if [ "$1" = "-s" ]; then - shift - sht=1 -fi + "piped") + psql $pg_args -t -q -A -F '|' $@ + ;; + "dump") + if [ $# -eq 1 ]; then + pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE + else + pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE > $1 + fi + ;; + "dumpall") + if [ $# -eq 1 ]; then + pg_dump -h $DBHOST -U $DBUSER $DBBASE + else + pg_dump -h $DBHOST -U $DBUSER $DBBASE > $1 + fi + ;; + "add") + ( echo "-- MESG: add start" ; cat "$@" | egrep -iv "$MATCH_DROP" ; echo "-- MESG: add end" ; ) | sqlexe + ;; + "del") + ( echo "-- MESG: del start" ; cat "$@" | egrep -i "$MATCH_DROP" | tac ; echo "-- MESG: del end" ; ) | sqlexe + ;; + "help"|"-h"|"--help") + usage 0 + ;; + *) + usage 1 + ;; +esac -if [ "$1" = "create" ]; then - echo "su root" - su root -c "su postgres -c \"echo \\\"DBUser passwd: $DBPASS\\\" ; createuser -S -D -R -P $DBUSER && createdb -E utf8 -O $DBUSER $DBBASE\"" -elif [ "$1" = "destroy" ]; then - echo "su root" - su root -c "su postgres -c \"dropdb $DBBASE && dropuser $DBUSER\"" -elif [ "$1" = "clean" ]; then - ( echo "-- MESG: clean start" ; one_or_all $2 | grep -i '^drop' | tac ; echo "-- MESG: clean end" ; ) | sqlexe $sht -elif [ "$1" = "build" ]; then - ( echo "-- MESG: build start" ; one_or_all $2 | grep -iv '^drop' ; echo "-- MESG: build end" ; ) | sqlexe $sht -elif [ "$1" = "rebuild" ]; then - ( echo "-- MESG: clean start" ; one_or_all $2 | grep -i '^drop' | tac ; echo "-- MESG: clean end" ; \ - echo "-- MESG: build start" ; one_or_all $2 | grep -iv '^drop' ; echo "-- MESG: build end" ; ) \ - | sqlexe $sht -elif [ "$1" = "psql" ]; then - shift - psql $pg_args $@ -elif [ "$1" = "piped" ]; then - shift - psql $pg_args -t -q -A -F '|' $@ -elif [ "$1" = "dump" ]; then - if [ $# -eq 1 ]; then - pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE - else - pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE > $2 - fi -elif [ "$1" = "dumpall" ]; then - if [ $# -eq 1 ]; then - pg_dump -h $DBHOST -U $DBUSER $DBBASE - else - pg_dump -h $DBHOST -U $DBUSER $DBBASE > $2 - fi -elif [ "$1" = "add" ]; then - cat "$2" | sqlexe $sht -else - echo " USAGE" - echo " ./builder create" - echo " ./builder destroy" - echo " ./builder clean" - echo " ./builder build" - echo " ./builder rebuild" - echo " ./builder psql" - echo " ./builder piped" - echo " ./builder add " - echo " ./builder dump [dumpfile]" - echo " ./builder dumpall [dumpfile]" - echo " ./builder all" - echo " ./builder help" -fi +exit 0 diff --git a/sql/sql.d/053-user-enh.sql b/sql/sql.d/053-user-enh.sql index e5c6b44..727a391 100644 --- a/sql/sql.d/053-user-enh.sql +++ b/sql/sql.d/053-user-enh.sql @@ -1,2 +1,6 @@ +ALTER TABLE #PFX#users DROP COLUMN last_dona; ALTER TABLE #PFX#users ADD COLUMN last_dona integer DEFAULT 0; -- last donate -ALTER TABLE #PFX#users ADD COLUMN supp_comp text DEFAULT 'ff0000ffff00' -- fg/bg supporter color \ No newline at end of file + +ALTER TABLE #PFX#users DROP COLUMN supp_comp; +ALTER TABLE #PFX#users ADD COLUMN supp_comp text DEFAULT 'ff0000ffff00'; -- fg/bg supporter color + diff --git a/sql/sql.d/054-continue-match.sql b/sql/sql.d/054-continue-match.sql new file mode 100644 index 0000000..0ed40fb --- /dev/null +++ b/sql/sql.d/054-continue-match.sql @@ -0,0 +1,31 @@ +DROP TABLE #PFX#bin5_table_orders; +CREATE TABLE #PFX#bin5_table_orders ( + mcode integer REFERENCES #PFX#bin5_matches (code) ON DELETE cascade ON UPDATE cascade, + pos integer, + ucode integer REFERENCES #PFX#users (code) ON DELETE cascade ON UPDATE cascade + ); + +ALTER TABLE #PFX#bin5_matches DROP COLUMN mult_next; +ALTER TABLE #PFX#bin5_matches ADD COLUMN mult_next integer DEFAULT -1; -- next multiplier + +ALTER TABLE #PFX#bin5_matches DROP COLUMN mazzo_next; +ALTER TABLE #PFX#bin5_matches ADD COLUMN mazzo_next integer DEFAULT -1; -- next card shaker + + +ALTER TABLE #PFX#bin5_games DROP COLUMN asta_pnt; +ALTER TABLE #PFX#bin5_games ADD COLUMN asta_pnt integer DEFAULT -1; -- curr bet points + +ALTER TABLE #PFX#bin5_games DROP COLUMN pnt; +ALTER TABLE #PFX#bin5_games ADD COLUMN pnt integer DEFAULT -1; -- curr points made + +ALTER TABLE #PFX#bin5_games DROP COLUMN asta_win; +ALTER TABLE #PFX#bin5_games ADD COLUMN asta_win integer DEFAULT -1; -- curr caller id + +ALTER TABLE #PFX#bin5_games DROP COLUMN friend; +ALTER TABLE #PFX#bin5_games ADD COLUMN friend integer DEFAULT -1; -- curr callee id + +ALTER TABLE #PFX#bin5_games DROP COLUMN mazzo; +ALTER TABLE #PFX#bin5_games ADD COLUMN mazzo integer DEFAULT -1; -- curr card shaker + +ALTER TABLE #PFX#bin5_games DROP COLUMN mult; +ALTER TABLE #PFX#bin5_games ADD COLUMN mult integer DEFAULT -1; -- curr multiplier diff --git a/sql/sql.d/060-tournament.sql b/sql/sql.d/060-tournament.sql new file mode 100644 index 0000000..7f9e340 --- /dev/null +++ b/sql/sql.d/060-tournament.sql @@ -0,0 +1,20 @@ +DROP TABLE #PFX#bin5_tournaments; +CREATE TABLE #PFX#bin5_tournaments ( + code SERIAL PRIMARY KEY, + active integer, + name text + ); + +-- add tournaments and field in the bin5_matches table +INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (1, 1, 'normal match'); +INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (2, 1, 'special match'); +ALTER SEQUENCE #PFX#bin5_tournaments_code_seq RESTART WITH 3; + +ALTER TABLE #PFX#bin5_matches DROP COLUMN tcode; +ALTER TABLE #PFX#bin5_matches ADD COLUMN tcode integer DEFAULT 1; + +ALTER TABLE #PFX#bin5_matches DROP CONSTRAINT #PFX#bin5_matches_tcode_fkey; +ALTER TABLE #PFX#bin5_matches ADD FOREIGN KEY (tcode) REFERENCES #PFX#bin5_tournaments(code) ON UPDATE cascade ON DELETE cascade; + +ALTER TABLE #PFX#bin5_games DROP COLUMN act; +ALTER TABLE #PFX#bin5_games ADD COLUMN act integer DEFAULT -1; -- end reason of the game diff --git a/sql/sql.d/100-anagr.sql.noinsert b/sql/sql.d/100-anagr.sql.noinsert index d902048..474c39b 100644 --- a/sql/sql.d/100-anagr.sql.noinsert +++ b/sql/sql.d/100-anagr.sql.noinsert @@ -10,9 +10,10 @@ -- define(USER_FLAG_TY_SUSPEND, 0x00400000); // done -- define(USER_FLAG_TY_DISABLE, 0x00800000); // done -INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (1, 'uno', md5('one'), 'uno@pluto.com', CAST (X'00020000' as integer), 0); -INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (2, 'due', md5('two'), 'due@pluto.com', CAST (X'00010000' as integer), 0); -INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (3, 'tre', md5('thr'), 'tre@pluto.com', CAST (X'00010000' as integer), 0); -INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (4, 'qua', md5('for'), 'qua@pluto.com', CAST (X'00210000' as integer), 0); -INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (5, 'cin', md5('fiv'), 'cin@pluto.com', CAST (X'00010000' as integer), 0); - +INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10101, 'uno', md5('one'), 'uno@pluto.com', CAST (X'00020000' as integer)); +INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10102, 'due', md5('two'), 'due@pluto.com', CAST (X'00010000' as integer)); +INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10103, 'tre', md5('thr'), 'tre@pluto.com', CAST (X'00010000' as integer)); +INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10104, 'qua', md5('for'), 'qua@pluto.com', CAST (X'00010000' as integer)); +INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10105, 'cin', md5('fiv'), 'cin@pluto.com', CAST (X'00010000' as integer)); +INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10106, 'sei', md5('six'), 'sei@pluto.com', CAST (X'00210000' as integer)); +ALTER SEQUENCE #PFX#users_code_seq RESTART WITH 10107; diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index abcf468..56e7556 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -141,12 +141,12 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', $G_lng = langtolng($G_lang); $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "4.9.3"; +$G_brisk_version = "4.10.0"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ -$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': aggiunto WebSocket come sistema preferenziale di comunicazione e corretto qualche bug.', +$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': aggiunto il comando /cont per proseguire le partite.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ), - 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: added WebSocket as preferential communication system and fixed some bug.', + 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: added /cont command to continue matches.', 'If you want to subscribe our Mailing List, click it!' ) ); $G_room_help = array( 'it' => ' @@ -173,6 +173,7 @@ Dopo che è iniziata una partita per uscirne dovete chiedere agli altri gi
/nick <nuovo_nickname> - cambio di nickname
/tav <frase di invito> - invito per gli altri giocatori al tavolo dove si è seduti
/st <stato> - cambia l\'icona associata al tuo user; stato può valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\" +
/cont <id partita> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
/authreq - se si è autenticati permette di garantire per un utente fidato
/mesgtoadm - se si è autenticati permette di lasciare un messaggio all\'amministratore del sito
/listen <all or auth> - se si è autenticati permette leggere solo i messaggi degli altri autenticati (auth) o di tutti (all) diff --git a/web/Obj/dbase_file.phh b/web/Obj/dbase_file.phh index 223b3a1..d917a81 100644 --- a/web/Obj/dbase_file.phh +++ b/web/Obj/dbase_file.phh @@ -178,7 +178,7 @@ class BriskDB { return ($ret); } - function bin5_points_save($date, $ttok, $tidx, $codes, $pts) + function bin5_points_save($date, $table, $tidx, $action, $ucodes, $pts) { return TRUE; } diff --git a/web/Obj/dbase_pgsql.phh b/web/Obj/dbase_pgsql.phh index 20f4725..ba8fc60 100644 --- a/web/Obj/dbase_pgsql.phh +++ b/web/Obj/dbase_pgsql.phh @@ -3,7 +3,7 @@ * brisk - dbase_pgsql.phh * * Copyright (C) 2006-2012 Matteo Nastasi - * mailto: nastasi@alternativeoutput.it + * mailto: nastasi@alternativeoutput.it * matteo.nastasi@milug.org * web: http://www.alternativeoutput.it * @@ -34,20 +34,20 @@ function escsql($s) return str_replace($escsql_from, $escsql_to, $s); } -class DBConn +class DBConn { static $dbcnnx = FALSE; var $db = FALSE; - + function DBConn() { - $this->db = DBConn::$dbcnnx; + $this->db = DBConn::$dbcnnx; } static function create() { GLOBAL $G_dbauth; - + if (DBConn::$dbcnnx == FALSE) { if (!(DBConn::$dbcnnx = @pg_connect ($G_dbauth, PGSQL_CONNECT_FORCE_NEW))) { return (FALSE); @@ -85,7 +85,7 @@ class BriskDB var $dbconn; var $item; var $item_n; - + function BriskDB($dbconn) { $this->dbconn = $dbconn; @@ -98,15 +98,15 @@ class BriskDB $ret = FALSE; log_main("BriskDB create:start"); - + do { if (($dbconn = DBConn::create()) == FALSE) { break; } - + $ret = new BriskDB($dbconn); } while (0); - + return ($ret); } @@ -125,20 +125,20 @@ class BriskDB function users_load() { } - + function login_exists($login) { GLOBAL $G_dbpfx; /* check the existence of the nick in the BriskDB */ log_main("login_exists: ".$login); - + $user_sql = sprintf("SELECT * FROM %susers WHERE login = lower('%s') AND (type & CAST (X'%08x' as integer)) = 0;", $G_dbpfx, escsql($login), USER_FLAG_TY_DISABLE); if (($user_pg = $this->query($user_sql)) != FALSE) if (pg_numrows($user_pg) == 1) return TRUE; - + return FALSE; } @@ -151,7 +151,7 @@ class BriskDB } if (pg_numrows($user_pg) != 1) return FALSE; - + $user_obj = pg_fetch_object($user_pg, 0); return ($user_obj); @@ -187,37 +187,39 @@ class BriskDB return TRUE; } - + + /* + if success return a LoginDBItem object + */ function login_verify($login, $pass) { GLOBAL $G_dbpfx; - + $ret = FALSE; - + log_main("login_verify: ".$login); - - + //O /* check the existence of the nick in the BriskDB */ //O for ($i = 0 ; $i < $this->item_n ; $i++) { //O log_main("login_verify: BEGIN"); - + if (($user_obj = $this->getrecord_bylogin($login)) == FALSE) { return FALSE; } log_main("login[".$user_obj->code."]: ".$user_obj->login); - + /* if it exists check for a valid challenge */ - if (($a_sem = Challenges::lock_data(TRUE)) != FALSE) { + if (($a_sem = Challenges::lock_data(TRUE)) != FALSE) { if (($chals = &Challenges::load_data()) != FALSE) { for ($e = 0 ; $e < $chals->item_n ; $e++) { log_main("challenge[".$e."]: ".$chals->item[$e]->login); if (strcmp($login, $chals->item[$e]->login) == 0) { log_main("login_verify [".$pass."] with [".md5($chals->item[$e]->token.$user_obj->pass)."]"); - + if (strcmp($pass, md5($chals->item[$e]->token.$user_obj->pass)) == 0) { log_main("login_verify SUCCESS for ".$login); - + $chals->rem($login); $this->user_update_login_time($user_obj->code, time()); $ret = LoginDBItem::LoginDBItemFromRecord($user_obj); @@ -226,33 +228,33 @@ class BriskDB } } // end for ($e = 0 ... } - + if ($chals->ismod()) { Challenges::save_data(&$chals); } - + Challenges::unlock_data($a_sem); } //O break; // O } // if (strcasecmp($this->item[$i]->login, ... //O } - + return ($ret); } function getitem_bylogin($login, &$id) { $ret = FALSE; $id = -1; - + log_main("getitem_bylogin: ".$login); - + if (($user_obj = $this->getrecord_bylogin($login)) == FALSE) return $ret; $id = $user_obj->code; return (LoginDBItem::LoginDBItemFromRecord($user_obj)); } - + // TODO FOR DB function getmail($login) { @@ -260,7 +262,7 @@ class BriskDB if (($ret = $this->getrecord_bylogin($login)) == FALSE) return FALSE; - + return ($ret->email); } @@ -271,7 +273,7 @@ class BriskDB for ($i = 0 ; $i < $olddb->count() ; $i++) { $user_sql = sprintf("INSERT INTO %susers ( login, pass, email, type) VALUES ('%s', '%s', '%s', %d);", $G_dbpfx, escsql(strtolower($olddb->item[$i]->login)), escsql($olddb->item[$i]->pass), - escsql($olddb->item[$i]->email), $olddb->item[$i]->type & USER_FLAG_TY_ALL); + escsql($olddb->item[$i]->email), $olddb->item[$i]->type & USER_FLAG_TY_ALL); if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) { $cont .= sprintf("ERROR IN LINE: %s\n", eschtml($user_sql)); @@ -287,11 +289,181 @@ class BriskDB return ($this->dbconn); } - // ttok text UNIQUE, - // tidx - function bin5_points_save($date, $ttok, $tidx, $ucodes, $pts) + // return array of array('code', 'login' [, 'first', 'last', 'tidx']) ordered by table position + function users_get($match_code, $with_minmaxtidx, $is_newmatch) + { + GLOBAL $G_dbpfx; + + if ($is_newmatch) { // is new + $usr_sql = sprintf("SELECT u.code AS code, u.login AS login%s + FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, + %susers AS u, %sbin5_table_orders AS o + WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode + AND m.code = o.mcode AND u.code = o.ucode AND m.code = %d + GROUP BY u.code, u.login%s, o.pos + ORDER BY o.pos;", + ($with_minmaxtidx ? ", min(g.tstamp) AS first, max(g.tstamp) AS last, m.tidx AS tidx" : ""), + $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $match_code, + ($with_minmaxtidx ? ", m.tidx" : "")); + } + else { // is old + $usr_sql = sprintf("SELECT u.code AS code, u.login AS login%s + FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u + WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d + GROUP BY u.code, u.login%s;", + ($with_minmaxtidx ? ", min(g.tstamp) AS first, max(g.tstamp) AS last, m.tidx AS tidx" : ""), + $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $match_code, + ($with_minmaxtidx ? ", m.tidx" : "")); + } + + if (($usr_pg = pg_query($this->dbconn->db(), $usr_sql)) == FALSE ) { + log_crit(sprintf("%s::%s: pg_query usr_sql failed [%s]", __CLASS__, __FUNCTION__, $usr_sql)); + return (FALSE); + } + $usr_n = pg_numrows($usr_pg); + if ($usr_n != BIN5_PLAYERS_N) { + log_crit(sprintf("%s::%s: wrong number of players [%s] %d", __CLASS__, __FUNCTION__, $usr_sql, $usr_n)); + return (FALSE); + } + $users = array(); + + if ($with_minmaxtidx) + $fields = array('code', 'login', 'first', 'last', 'tidx'); + else + $fields = array('code', 'login'); + + for ($u = 0 ; $u < $usr_n ; $u++) { + $usr_obj = pg_fetch_object($usr_pg, $u); + $users[$u] = array(); + foreach($fields as $field) { + $users[$u][$field] = $usr_obj->$field; + } + } + return ($users); + } + + // out: tab->{points,points_n,old_reason}, in: tab->ttok + function match_continue($match_code, $table, $tidx) + { + GLOBAL $G_dbpfx; + + if (($users = $this->users_get($match_code, FALSE /*without minmaxidx*/, TRUE /*new game*/)) == FALSE) { + log_crit(sprintf("%s::%s: retrieve users fails", __CLASS__, __FUNCTION__)); + return (FALSE); + } + + $num_sql = sprintf("SELECT count(*) AS points_n FROM %sbin5_games WHERE mcode = %d;", $G_dbpfx, $match_code); + if (($num_pg = $this->query($num_sql)) == FALSE || pg_numrows($num_pg) != 1) { + log_crit(sprintf("%s::%s: get games number fails", __CLASS__, __FUNCTION__)); + return (FALSE); + } + $num_obj = pg_fetch_object($num_pg, 0); + $table->points_n = $num_obj->points_n; + + $tot_sql = sprintf("SELECT sum(p.pts) AS pts + FROM %sbin5_games AS g, %sbin5_points AS p, %susers AS u, + %sbin5_table_orders AS o + WHERE g.mcode = %d AND g.code = p.gcode AND p.ucode = u.code + AND p.ucode = o.ucode AND g.mcode = o.mcode + GROUP BY p.ucode, o.pos + ORDER BY o.pos;", + $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $match_code); + if (($tot_pg = pg_query($this->dbconn->db(), $tot_sql)) == FALSE + || pg_numrows($tot_pg) != BIN5_PLAYERS_N) { + log_crit(sprintf("%s::%s: get games totals fails", __CLASS__, __FUNCTION__)); + return(FALSE); + } + + $u = 0; + foreach ($users as $user) { + $pts_sql = sprintf("SELECT p.pts AS pts + FROM %sbin5_points as p, %sbin5_games as g + WHERE p.gcode = g.code AND g.mcode = %d AND p.ucode = %d + ORDER BY g.code ASC + LIMIT %d OFFSET %d;", + $G_dbpfx, $G_dbpfx, $match_code, $user['code'], + MAX_POINTS, + ($num_obj->points_n < MAX_POINTS ? 0 : $num_obj->points_n - MAX_POINTS)); + + // points of the match for each user + if (($pts_pg = $this->query($pts_sql)) == FALSE) { + log_crit(sprintf("%s::%s: get points fails", __CLASS__, __FUNCTION__)); + return (FALSE); + } + $pts_n = pg_numrows($pts_pg); + if ($pts_n > $table->points_n) { + // inconsistent scenario number of points great than number of games + log_crit(sprintf("%s::%s: number of points great than number of games", __CLASS__, __FUNCTION__)); + return (FALSE); + } + for ($i = 0 , $ct = $table->points_n - $pts_n; $ct < $table->points_n ; $ct++, $i++) { + $pts_obj = pg_fetch_object($pts_pg, $i); + $table->points[$ct % MAX_POINTS][$u] = $pts_obj->pts; + } + $tot_obj = pg_fetch_object($tot_pg, $u); + $table->total[$u] = $tot_obj->pts; + + $u++; + } + + $gam_sql = sprintf("SELECT * FROM %sbin5_games WHERE mcode = %d ORDER BY code DESC LIMIT 1;", $G_dbpfx, $match_code); + if (($gam_pg = $this->query($gam_sql)) == FALSE || pg_numrows($gam_pg) != 1) { + log_crit(sprintf("%s::%s: get last game fails", __CLASS__, __FUNCTION__)); + return (FALSE); + } + $gam_obj = pg_fetch_object($gam_pg, 0); + + $table->old_reason = game_description($gam_obj->act, 'html', $gam_obj->mult, + $gam_obj->asta_win, $users[$gam_obj->asta_win]['login'], + $gam_obj->friend, $users[$gam_obj->friend]['login'], + $gam_obj->pnt, $gam_obj->asta_pnt); + + return (TRUE); + } + + function match_order_get(&$match_data, $match_code, $exp_num) + { + GLOBAL $G_dbpfx; + + $ord_sql = sprintf("SELECT ucode FROM %sbin5_table_orders WHERE mcode = %d ORDER BY pos ASC;", + $G_dbpfx, $match_code); + + if (($ord_pg = $this->query($ord_sql)) == FALSE || pg_numrows($ord_pg) != $exp_num) { + log_crit(sprintf("%s: fails for id or users number", __FUNCTION__)); + return (FALSE); + } + + $ucodes = array(); + for ($i = 0 ; $i < $exp_num ; $i++) { + $ord_obj = pg_fetch_object($ord_pg, $i); + $ucodes[$i] = $ord_obj->ucode; + } + + if ($match_data !== NULL) { + $mtdt_sql = sprintf("SELECT * FROM %sbin5_matches WHERE code = %d;", + $G_dbpfx, $match_code); + + if (($mtdt_pg = $this->query($mtdt_sql)) == FALSE || pg_numrows($mtdt_pg) != 1) { + log_crit(sprintf("%s: fails retrieve match_data values [%d]", __FUNCTION__, $match_code)); + return (FALSE); + } + + $mtdt_obj = pg_fetch_object($mtdt_pg, 0); + + foreach (array('ttok', 'tidx', 'mult_next', 'mazzo_next', 'tcode') as $match_name) { + $match_data[$match_name] = $mtdt_obj->$match_name; + } + } + + return ($ucodes); + } + + // ttok text UNIQUE, + // tidx + function bin5_points_save($date, $table, $tidx, $action, $ucodes, $pts) { GLOBAL $G_dbpfx; + $sql_ttok = escsql($table->table_token); $is_trans = FALSE; $ret = FALSE; @@ -299,7 +471,7 @@ class BriskDB $n = count($ucodes); /* check the existence of the nick in the BriskDB */ log_main("bin5_points_save: "); - + do { if ($this->query("BEGIN") == FALSE) { break; @@ -309,31 +481,49 @@ class BriskDB /* * matches management */ - $mtc_sql = sprintf("SELECT * FROM %sbin5_matches WHERE ttok = '%s';", $G_dbpfx, escsql($ttok)); + $mtc_sql = sprintf("UPDATE %sbin5_matches SET (mazzo_next, mult_next) = (%d, %d) WHERE ttok = '%s' RETURNING *;", + $G_dbpfx, $table->mazzo, $table->mult, $sql_ttok); if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) { + // match not exists, insert it - $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx) VALUES ('%s', %d) RETURNING *;", - $G_dbpfx, escsql($ttok), $tidx); - if ( ! (($mtc_pg = $this->query($mtc_sql)) != FALSE && - pg_affected_rows($mtc_pg) == 1) ) { + $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next) VALUES ('%s', %d, %d, %d) RETURNING *;", + $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult); + if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_affected_rows($mtc_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert match [%s]", $mtc_sql)); break; } + $mtc_obj = pg_fetch_object($mtc_pg, 0); + + for ($i = 0 ; $i < $n ; $i++) { + $ord_sql = sprintf("INSERT INTO %sbin5_table_orders (mcode, ucode, pos) VALUES (%d, %d, %d);", + $G_dbpfx, $mtc_obj->code, $ucodes[$i], $i); + if (($ord_pg = $this->query($ord_sql)) == FALSE || pg_affected_rows($ord_pg) != 1 ) { + log_crit(sprintf("bin5_points_save: failed at insert table order [%s]", $ord_sql)); + break; + } + } + if ($i < $n) + break; + } + else { + $mtc_obj = pg_fetch_object($mtc_pg,0); } - $mtc_obj = pg_fetch_object($mtc_pg,0); /* * games management */ - $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp) - VALUES (%d, to_timestamp(%d)) RETURNING *;", - $G_dbpfx, $mtc_obj->code, $date); - if ( ! (($gam_pg = $this->query($gam_sql)) != FALSE && - pg_affected_rows($gam_pg) == 1) ) { + $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult) + VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d) RETURNING *;", + $G_dbpfx, $mtc_obj->code, $date, $action, + $table->old_asta_pnt, $table->old_pnt, + $table->old_asta_win, + $table->old_friend, + $table->old_mazzo, $table->old_mult); + if (($gam_pg = $this->query($gam_sql)) == FALSE || pg_affected_rows($gam_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert game [%s]", $gam_sql)); - break; + break; } - + $gam_obj = pg_fetch_object($gam_pg,0); /* @@ -341,37 +531,36 @@ class BriskDB */ for ($i = 0 ; $i < $n ; $i++) { /* put points */ - $pts_sql = sprintf("INSERT INTO %sbin5_points (gcode, ucode, pts) + $pts_sql = sprintf("INSERT INTO %sbin5_points (gcode, ucode, pts) VALUES (%d, %d, %d);", $G_dbpfx, $gam_obj->code, $ucodes[$i], $pts[$i]); - if ( ! (($pts_pg = $this->query($pts_sql)) != FALSE && - pg_affected_rows($pts_pg) == 1) ) { + if (($pts_pg = $this->query($pts_sql)) == FALSE || pg_affected_rows($pts_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert point [%s]", $pts_sql)); - break; + break; } } - if ($i < $n) break; - + if ($this->query("COMMIT") == FALSE) { break; } - + $is_trans = FALSE; - $ret = TRUE; + $table->match_id = $mtc_obj->code; + $ret = TRUE; } while (0); - + if ($is_trans) $this->query("ROLLBACK"); - + return $ret; } } // End class BriskDB -class LoginDBOld +class LoginDBOld { var $item; var $item_n; diff --git a/web/Obj/sac-a-push.phh b/web/Obj/sac-a-push.phh index 0ae856e..973e012 100644 --- a/web/Obj/sac-a-push.phh +++ b/web/Obj/sac-a-push.phh @@ -709,7 +709,7 @@ class Sac_a_push { if ($buf == FALSE || mb_strlen($buf, "ASCII") == 0) { // close socket case if ($buf == FALSE) { - printf("ERROR READING\n"); + printf("INFO: read return false\n"); } if ($sock === $this->list) { printf("Arrivati %d bytes da list\n", mb_strlen($buf, "ASCII")); @@ -756,7 +756,7 @@ class Sac_a_push { global_dump(); } - else if ($line == "shutdown") { + else if ($line == "shutdown" || $line == "sd") { if ($this->app->dump_data()) { return(0); } diff --git a/web/Obj/transports.phh b/web/Obj/transports.phh index 5ebfec4..5f269d7 100644 --- a/web/Obj/transports.phh +++ b/web/Obj/transports.phh @@ -203,6 +203,7 @@ class Transport_websocket { function chunk($step, $cont) { + // fprintf(STDERR, "CHUNK: [%s]\n", $cont); return $this->frame('@BEGIN@'.$cont.'@END@'); // , 'text', TRUE); } @@ -503,6 +504,7 @@ class Transport_xhr { function chunk($step, $cont) { + // fprintf(STDERR, "CHUNK: [%s]\n", $cont); return ("@BEGIN@".$cont."@END@"); } @@ -574,6 +576,7 @@ push(\"%s\"); function chunk($step, $cont) { + // fprintf(STDERR, "CHUNK: [%s]\n", $cont); if ($cont == NULL) { return sprintf("", $step); diff --git a/web/Obj/user.phh b/web/Obj/user.phh index 2caf30a..0ac092a 100644 --- a/web/Obj/user.phh +++ b/web/Obj/user.phh @@ -83,8 +83,8 @@ $mlang_indrd = array( class User { var $room; // reference to the room where the user is registered - var $idx; // index in the users array when you are in game - var $idx_orig; // index in the users array when you aren't in game + var $idx; // index in the room users array when you are in game + var $idx_orig; // index in the room table users array when you aren't in game var $code; // authentication code var $name; // name of the user var $sess; // session of the user @@ -640,6 +640,12 @@ class User { for ($i = $cur_step ; $i < $this->step ; $i++) { $ii = $i % COMM_N; log_rd2("ADDED TO THE STREAM: ".$this->comm[$ii]); + if ($this->comm[$ii] == "") { + if ($i == $cur_step) + continue; + else + break; + } $ret .= $this->comm[$ii]; } $new_stat = $this->stat; diff --git a/web/brisk.css b/web/brisk.css index 82fbe90..fa59bbd 100644 --- a/web/brisk.css +++ b/web/brisk.css @@ -22,7 +22,7 @@ */ body { - background-image: url('img/snowy.jpg'); + background-image: url('img/happysunbg.jpg'); background-color: #fafafa; background-repeat: no-repeat; background-position: center center; diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 8388df8..7988b8a 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -2,8 +2,8 @@ /* * brisk - briskin5.phh * - * Copyright (C) 2006-2012 Matteo Nastasi - * mailto: nastasi@alternativeoutput.it + * Copyright (C) 2006-2013 Matteo Nastasi + * mailto: nastasi@alternativeoutput.it * matteo.nastasi@milug.org * web: http://www.alternativeoutput.it * @@ -22,6 +22,7 @@ * */ define('BIN5_PLAYERS_N', 3); +define('BIN5_CARD_HAND', 3); // normal value 8 define('BIN5_MAX_PLAYERS', BIN5_PLAYERS_N); // define(BIN5_SHM_MIN', (50000 * BIN5_MAX_PLAYERS)); define('BIN5_SHM_MIN', 32768); @@ -29,34 +30,59 @@ define('BIN5_SHM_MAX', (BIN5_SHM_MIN + 1048576)); define('BIN5_SHM_DLT', 32768); define('BIN5_PROXY_PATH', PROXY_PATH."/bin5"); -$mlang_bin5_bin5 = array( - 'info_part' => array( 'it' => '
Nell\'ultima mano ha chiamato %s, il socio era %s,
', - 'en' => '
In the last hand the declarer was %s, the partner was %s,
'), - 'info_capp' => array( 'it' => 'hanno fatto cappotto EBBRAVI!.
', - 'en' => 'and they made capot WELL DONE!.
'), - 'info_pnt' => array( 'it' => 'dovevano fare %s punti e ne hanno fatti %d: hanno %s.
', - 'en' => 'they had to do %s points and they had made %d: they have %s.
'), - 'info_alea' => array( 'it' => 'almeno ', - 'en' => 'at least '), - 'info_more' => array( 'it' => 'più di 60', - 'en' => 'over 60'), - 'info_win' => array( 'it' => 'vinto', - 'en' => 'win'), - 'info_peer' => array( 'it' => 'pareggiato', - 'en' => 'drew'), - 'info_lost' => array( 'it' => 'perso', - 'en' => 'lost'), - - 'info_alon' => array( 'it' => '
Nell\'ultima partita %s si è chiamato in mano,
', - 'en' => '
In the last hand %s play alone against each other,
'), - 'info_apnt' => array( 'it' => 'doveva fare %s punti e ne ha fatti %d: ha %s.
', - 'en' => 'he/she had to do %s points and they had made %d: he/she had %s.
'), - 'info_acap' => array( 'it' => 'ha fatto cappotto EBBRAVO!.
', - 'en' => 'and he/she made capot WELL DONE!.
'), - - 'info_omul' => array( 'it' => ' La partita valeva %s.', - 'en' => ' EN: The game was worth %s.' ), +define('BIN5_RULES_OLDSCHEMA', -1); +define('BIN5_RULES_FINISH', 0); +define('BIN5_RULES_ABANDON', 1); +define('BIN5_RULES_ALLPASS', 2); + +$mlang_bin5_bin5 = array( + // br, hr, b, /b, win, fri + 'info_part' => array( 'it' => 'Nell\'ultima mano ha chiamato %3$s%5$s%4$s, il socio era %3$s%6$s%4$s,%1$s', + 'en' => 'In the last hand the declarer was %3$s%5$s%4$s, the partner was %3$s%6$s%4$s,%1$s'), + // br, hr, b, /b + 'info_capp' => array( 'it' => 'hanno fatto %3$scappotto%4$s EBBRAVI!.%1$s', + 'en' => 'and they made %3Dscapot%4$s WELL DONE!.%1$s'), + + // br, hr, b, /b, old_asta_pnt, old_pnt, winornot + 'info_alea' => array( 'it' => 'dovevano fare %3$salmeno %5$d%4$s punti e ne hanno fatti %3$s%6$d%4$s: hanno %7$s.%1$s', + 'en' => 'they had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: they have %7$s.%1$s'), + // br, hr, b, /b, old_pnt, winornot + 'info_more' => array( 'it' => 'dovevano fare %3$spiù di 60%4$s punti e ne hanno fatti %3$s%5$d%4$s: hanno %6$s.%1$s', + 'en' => 'they had to do %3$sover 60%4$s points and they had made %3$s%5$d%4$s: they have %3$s%6$s%4$s.%1$s'), + 'info_win' => array( 'it' => 'vinto', + 'en' => 'win'), + 'info_peer' => array( 'it' => 'pareggiato', + 'en' => 'drew'), + 'info_lost' => array( 'it' => 'perso', + 'en' => 'lost'), + + // br, hr, b, /b, win_name + 'info_alon' => array( 'it' => 'Nell\'ultima partita %3$s%5$s%4$s si è chiamato in mano,%1$s', + 'en' => 'In the last hand %3$s%5$s%4$s play alone against each other,%1$s'), + // br, hr, b, /b, old_asta_pnt, old_pnt, winornot + 'info_aleaa' => array( 'it' => 'doveva fare %3$salmeno %5$d%4$s punti e ne ha fatti %3$s%6$d%4$s: ha %3$s%7$s%4$s.%1$s', + 'en' => 'he/she had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: he/she had %3$s%7$s%4$s.%1$s'), + // br, hr, b, /b, old_pnt, winornot + 'info_morea' => array( 'it' => 'doveva fare %3$spiù di 60%4$s punti e ne ha fatti %3$s%5$d%4$s: ha %3$s%6$s%4$s.%1$s', + 'en' => 'he/she had to do %3$smore than 60%4$s points and they had made %3$s%5$d%4$s: he/she had %3$s%6$s%4$s.%1$s'), + // br, hr, b, /b + 'info_acap' => array( 'it' => 'ha fatto %3$scappotto%4$s EBBRAVO!.%1$s', + 'en' => 'and he/she made %3$scapot%4$s WELL DONE!.%1$s'), + + // br, hr, b, /b + 'info_omul' => array( 'it' => '%1$sLa partita valeva %3$s%5$s%4$s.%1$s', + 'en' => '%1$sEN: The game was worth %3$s%5$s%4$s.%1$s' ), + + // br, hr, b, /b + 'info_alpa' => array( 'it' => '%1$sHanno passato %3$stutti%4$s.%1$s', + 'en' => '%1$sEN: Hanno passato %3$stutti%4$s.%1$s' ), + + // br, hr, b, /b, aband-name + 'info_aban' => array( 'it' => ' Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.', + 'en' => ' EN: Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.'), + 'info_shuf' => array( 'it' => 'Il mazzo a %s, ', + 'en' => '%s shuffled the cards, '), 'info_yturn'=> array( 'it' => ' tocca a te giocare.', 'en' => ' it\'s your turn.'), 'info_turn' => array( 'it' => 'tocca a %s giocare.', @@ -65,8 +91,8 @@ $mlang_bin5_bin5 = array( 'en' => ' The game worth %s.' ), 'info_yshuf'=> array( 'it' => 'Fai tu il mazzo, ', 'en' => 'It\'s your shuffled the cards, '), - 'info_shuf' => array( 'it' => 'Il mazzo a %s, ', - 'en' => '%s shuffled the cards, '), + 'info_match'=> array( 'it' => 'Il codice della partita è %d.', + 'en' => 'Match code is %d.'), 'btn_bkgame'=> array( 'it' => 'torna alla partita', 'en' => 'back to the game'), 'call_wptn' => array( 'it' => '
con %d punti', @@ -75,8 +101,6 @@ $mlang_bin5_bin5 = array( 'en' => 'Call%s:'), 'call_call' => array( 'it' => 'Chiama %s%s:', 'en' => 'The declarer is %s%s:') - - ); // MLANG @@ -148,30 +172,34 @@ class Bin5_table extends Table { var $asta_pla_n; var $asta_card; var $asta_pnt; - + var $mult; var $points; // points array var $points_n; // number of row of points var $total; - var $asta_win; + var $asta_win; // the caller idx position at table var $briscola; - var $friend; - + var $friend; // the callee idx position at table + + var $match_id; // the id of the match on the database (-1 == just not saved) + + var $old_act; // last action that trigs the end of the game + var $old_mazzo; var $old_reason; var $old_asta_pnt; var $old_mult; - var $old_pnt; - var $old_win; - var $old_friend; + var $old_pnt; // points made by caller and callee + var $old_asta_win; // the old caller idx position at table + var $old_friend; // the old callee idx position at table - function Bin5_table() + function Bin5_table() { } /* CREATE() NOT USED - function create($idx) + function create($idx) { if (($thiz =& new Bin5_table()) == FALSE) return (FALSE); @@ -184,7 +212,7 @@ class Bin5_table extends Table { $thiz->asta_card = -1; $thiz->asta_pnt = -1; $thiz->mult = 0; - + $thiz->points = array( ); $thiz->points_n = 0; $thiz->total = array( 0, 0, 0, 0, 0); @@ -193,11 +221,15 @@ class Bin5_table extends Table { $thiz->friend = -1; $thiz->turn = 0; + $thiz->match_id = -1; + + $thiz->old_act = -1; + $thiz->old_mazzo = -1; $thiz->old_reason = ""; $thiz->old_asta_pnt = -1; $thiz->old_mult = -1; $thiz->old_pnt = -1; - $thiz->old_win = -1; + $thiz->old_asta_win = -1; $thiz->old_friend = -1; return ($thiz); @@ -209,34 +241,38 @@ class Bin5_table extends Table { { if (($thiz =& new Bin5_table()) == FALSE) return (FALSE); - + parent::copy($from); - $thiz->card = $from->card; - $thiz->mazzo = $from->mazzo; // REVIEW - $thiz->gstart = $from->gstart; - $thiz->turn = $from->turn; - - $thiz->asta_pla = $from->asta_pla; - $thiz->asta_pla_n = $from->asta_pla_n; - $thiz->asta_card = $from->asta_card; - $thiz->asta_pnt = $from->asta_pnt; - - $thiz->mult = $from->mult; - $thiz->points = $from->points; - $thiz->points_n = $from->points_n; - $thiz->total = $from->total; - - $thiz->asta_win = $from->asta_win; - $thiz->briscola = $from->briscola; - $thiz->friend = $from->friend; - - $thiz->old_reason = $from->old_reason; + $thiz->card = $from->card; + $thiz->mazzo = $from->mazzo; // REVIEW + $thiz->gstart = $from->gstart; + $thiz->turn = $from->turn; + + $thiz->asta_pla = $from->asta_pla; + $thiz->asta_pla_n = $from->asta_pla_n; + $thiz->asta_card = $from->asta_card; + $thiz->asta_pnt = $from->asta_pnt; + + $thiz->mult = $from->mult; + $thiz->points = $from->points; + $thiz->points_n = $from->points_n; + $thiz->total = $from->total; + + $thiz->asta_win = $from->asta_win; + $thiz->briscola = $from->briscola; + $thiz->friend = $from->friend; + + $thiz->match_id = $from->match_id; + + $thiz->old_act = $from->old_act; + $thiz->old_mazzo = $from->old_mazzo; + $thiz->old_reason = $from->old_reason; $thiz->old_asta_pnt = $from->old_asta_pnt; - $thiz->old_mult = $from->mult; - $thiz->old_pnt = $from->old_pnt; - $thiz->old_win = $from->old_win; - $thiz->old_friend = $from->old_friend; + $thiz->old_mult = $from->mult; + $thiz->old_pnt = $from->old_pnt; + $thiz->old_asta_win = $from->old_asta_win; + $thiz->old_friend = $from->old_friend; return ($thiz); } @@ -251,7 +287,7 @@ class Bin5_table extends Table { { if (($thiz =& new Bin5_table()) == FALSE) return (FALSE); - + $thiz->parentcopy($from); log_main("PLAYER_N - spawn.".$thiz->player_n); @@ -259,9 +295,14 @@ class Bin5_table extends Table { $thiz->card = array(); $thiz->bunch_create(); $thiz->mazzo = rand(0,PLAYERS_N-1); + $thiz->points = array(); + $thiz->total = array(); $thiz->points_n = 0; $thiz->mult = 0; - $thiz->old_win = -1; + + $thiz->match_id = -1; + + $thiz->old_asta_win = -1; $thiz->old_reason = ""; // players are rearranged in an dedicated array @@ -269,12 +310,12 @@ class Bin5_table extends Table { for ($i = 0 ; $i < $from->player_n ; $i++) $thiz->player[$i] = $i; - log_main("TABLE_OLD_WIN - spawn:".$thiz->old_win); + log_main("TABLE_OLD_WIN - spawn:".$thiz->old_asta_win); return ($thiz); } - function asta2mult($asta_pnt) + static function asta2mult($asta_pnt) { if ($asta_pnt > 110) return (6); @@ -293,23 +334,29 @@ class Bin5_table extends Table { function multer($is_new) { if ($is_new) { - return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt)); + // return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt)); + return (static::s_multer($this->mult, $this->asta_pnt)); } else { - return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt)); + // return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt)); + return (static::s_multer($this->old_mult, $this->old_asta_pnt)); } } + static function s_multer($mult, $pnt) + { + return (pow(2, $mult) * static::asta2mult($pnt)); + } - // function bunch_create_old() function AND + // function bunch_create_old() function AND // { // $ret = array(); - // - // for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) { - // // for ($i = 0 ; $i < 40 ; $i++) { + // + // for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { + // // for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { // $ret[$i] =& new Card($i, 'bunch', 'no_owner'); // } - // + // // $oret = &$ret; // return ($oret); // } @@ -317,8 +364,8 @@ class Bin5_table extends Table { function bunch_create() { $ret = array(); - - for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) { + + for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { $this->card[$i] = new Card($i, 'bunch', 'no_owner'); } } @@ -327,18 +374,18 @@ class Bin5_table extends Table { { log_main("bunch_make start"); $ct = array(0,0,0,0,0); - + mt_srand(make_seed()); - - for ($i = (BIN5_PLAYERS_N == 5 ? 40 : 24) - 1 ; $i >= 0 ; $i--) + + for ($i = (BIN5_CARD_HAND * BIN5_PLAYERS_N) - 1 ; $i >= 0 ; $i--) $rest[$i] = $i; - for ($i = (BIN5_PLAYERS_N == 5 ? 40 : 24) - 1 ; $i >= 0 ; $i--) { + for ($i = (BIN5_CARD_HAND * BIN5_PLAYERS_N) - 1 ; $i >= 0 ; $i--) { $rn = rand(0, $i); - + if ($rn == 0) log_main("RND ZERO"); - + $id = $rest[$rn]; $owner = $i % BIN5_PLAYERS_N; @@ -356,12 +403,13 @@ class Bin5_table extends Table { $this->mazzo = rand(0,PLAYERS_N-1); $this->points_n = 0; $this->mult = 0; - $this->old_win = -1; + $this->old_asta_win = -1; $this->old_reason = ""; */ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $this->total[$i] = 0; $user_cur = $userarr[$this->player[$i]]; + $user_cur->stat_set('table'); $user_cur->exitislock = TRUE; } @@ -374,8 +422,7 @@ class Bin5_table extends Table { $this->gstart = ($this->mazzo+1) % BIN5_PLAYERS_N; $this->bunch_make(); - - + $this->asta_pla_n = BIN5_PLAYERS_N; $this->asta_card = -1; $this->asta_pnt = 60; @@ -383,7 +430,7 @@ class Bin5_table extends Table { $this->briscola = -1; $this->friend = -1; $this->turn = 0; - + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $this->asta_pla[$i] = TRUE; $user_cur = $userarr[$this->player[$i]]; @@ -391,24 +438,35 @@ class Bin5_table extends Table { $user_cur->asta_card = -2; $user_cur->asta_pnt = -1; $user_cur->handpt = $this->hand_points($i); - // SEE function calculate_points(&$table) } log_rd2("GEND 4"); } - function game_next() + function game_next($delta) + { + $this->old_mazzo = $this->mazzo; + $this->mazzo = ($this->mazzo + $delta) % BIN5_PLAYERS_N; + } + + function mult_inc($val) { - $this->mazzo = ($this->mazzo + 1) % BIN5_PLAYERS_N; + $this->old_mult = $this->mult; + $this->mult += $val; } + function mult_set($val) + { + $this->old_mult = $this->mult; + $this->mult = $val; + } function hand_points($idx) { - GLOBAL $G_all_points; - + GLOBAL $G_all_points; + $tot = 0; - - for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) { + + for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { // for ($i = 0 ; $i < 40 ; $i++) { if ($this->card[$i]->owner != $idx) continue; @@ -425,7 +483,7 @@ class Bin5_table extends Table { { $ct = $this->exitlock_calc($userarr, $table_pos); - $ret = sprintf('exitlock_show(%d, %s);', $ct, + $ret = sprintf('exitlock_show(%d, %s);', $ct, ($userarr[$this->player[$table_pos]]->exitislock ? 'true' : 'false')); return ($ret); } @@ -434,75 +492,363 @@ class Bin5_table extends Table { { $ct = 0; - for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) { + for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) { if ($userarr[$this->player[$i]]->exitislock == FALSE) $ct++; } return ($ct); } + + function rules_engine(&$bri, $curtime, $action, $user) + { + GLOBAL $G_all_points, $G_dbasetype; + + $pts = array(); + + $this->old_act = $action; + if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct + $this->old_asta_win = -1; + $this->old_pnt = 0; + $this->mult_inc(1); + for ($i = 0 ; $i < PLAYERS_N ; $i++) { + $pts[$i] = 0; + } + + $game_delta = 1; + // $this->game_next(1); + $this->game_init(&$bri->user); + } + else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct + log_wr(sprintf("GIOCO FINITO !!!")); + $this->old_asta_win = $user->table_pos; + $this->old_pnt = 0; + $this->mult_inc(1); + + for ($i = 0 ; $i < PLAYERS_N ; $i++) { + $pts[$i] = 0; + } + + // Non si cambia mazzo se si abbandona la partita + $game_delta = 0; + // $this->game_next(0); + $this->game_init(&$bri->user); + } + else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct + do { + $pro = 0; + + if ($this->asta_pnt == 60) + $this->asta_pnt = 61; + + $this->old_reason = ""; + + // count points for the temporary 2 teams + for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { + $ctt = $this->card[$i]->value % 10; + $own = $this->card[$i]->owner; + if ($own == $this->asta_win || $own == $this->friend) + $pro += $G_all_points[$ctt]; + } + + log_wr(sprintf("PRO: [%d]", $pro)); + + // PATTA case ! + if ($this->asta_pnt == 61 && $pro == 60) { + $this->points[$this->points_n % MAX_POINTS] = array(); + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $this->points[$this->points_n % MAX_POINTS][$i] = 0; + $pts[$i] = 0; + } + $this->points_n++; + $this->old_pnt = $pro; + $this->mult_inc(1); + + // return($pts); + break; + } + + if ($pro >= $this->asta_pnt) + $sig = 1; + else + $sig = -1; + + $this->points[$this->points_n % MAX_POINTS] = array(); + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + if ($i == $this->asta_win) + $pt = ($i == $this->friend ? 4 : 2); + else if ($i == $this->friend) + $pt = 1; + else + $pt = -1; + + log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pt)); + + $pt = $pt * $sig * $this->multer(TRUE) * ($pro == 120 ? 2 : 1); + + log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $this->multer(TRUE), ($pro == 120 ? 2 : 1))); + + $this->points[$this->points_n % MAX_POINTS][$i] = $pt; + $this->total[$i] += $pt; + $pts[$i] = $pt; + } + $this->points_n++; + $this->old_pnt = $pro; + $this->old_asta_win = $this->asta_win; + $this->mult_set(0); + + // return($pts); + } while (0); + $game_delta = 1; + } + else { + return (FALSE); + } + $this->game_next($game_delta); + + $plist = "$this->table_token|$user->table_orig|$this->player_n"; + $ucodes = array(); + $codes = ""; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + + /* pro db */ + $ucodes[$i] = $user_cur->code_get(); + + /* pro log */ + $plist .= '|'.xcapelt($user_cur->name).'|'.$pts[$i]; + $codes .= '|'.xcapelt($user_cur->code_get()); + } + $plist .= $codes; + log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); + + $this->old_asta_pnt = $this->asta_pnt; + // $this->old_mazzo is managed by ->game_next(); + // $this->old_mult, $this->old_pnt, $this->old_reason and $this->old_asta_win are specific + + $this->old_friend = $this->friend; + $this->old_reason = game_description($action, 'html', $this->old_mult, + $this->old_asta_win, $bri->user[$this->player[$this->old_asta_win]]->name, + $this->old_friend, $bri->user[$this->player[$this->old_friend]]->name, + $this->old_pnt, $this->old_asta_pnt); + + + if ($user->table_orig < TABLES_AUTH_N) { + require_once("../Obj/dbase_".$G_dbasetype.".phh"); + + if (($bdb = BriskDB::create()) != FALSE) { + $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pts); + unset($bdb); + } + else { + log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); + } + log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); + } + + $this->game_init(&$bri->user); + + return (TRUE); + } + + function match_continue(&$bri, $user, $match_id_s) + { + $ret = FALSE; + $curtime = time(); + + do { + /* - verify if match_id and user are both valid to accept + the match_continue request - */ + $match_id = (int)$match_id_s; + if ($match_id <= 0) { + $msg = "questa partita non esiste"; + 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; + } + // retrieves users list for this match + $match_data = array(); + if (($bdb = BriskDB::create()) != FALSE) { + // match_order_get return FALSE for old matches + $ucodes = $bdb->match_order_get($match_data, $match_id, BIN5_PLAYERS_N); + unset($bdb); + } + if ($ucodes == FALSE) { + $msg = "questa partita non è stata memorizzata correttamente"; + break; + } + + // if current user code must be in the users list + if (array_search($user->code, $ucodes) === FALSE) { + $msg = sprintf("Questo utente non compare nella partita che si vuole continuare [%d].", $user->code); + break; + } + + /* - the user is in the list, add the match_id to his profile + and check if he is the N'th to require continue - */ + + // set the match_id for the current user + $user->continue_set($match_id); + + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + if ($user_cur->continue_get() != $match_id) { + break; + } + } + $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); + 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); + } + + /* 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]]; + $user_cur->continue_set(BIN5_USER_CONTINUE_ALREADY); + + $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] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', + $dt, NICKSERV, $msg); + $user_cur->step_inc(); + } + } + } // end class Bin5_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_card; // var $asta_pnt; // var $handpt; // Total card points at the beginning of the current hand. var $exitislock; // Player can exit from the table ? - var $privflags; // Flags for briskin5 only + var $privflags; // Flags for briskin5 only + + var $continue; // Id of the match that the user would continue const BASE = "../"; - + function User() { } - + /* CREATE NOT USED function create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") { if (($thiz =& new User()) == FALSE) return (FALSE); - + $thiz->asta_card = -2; $thiz->asta_pnt = -1; $thiz->handpt = -1; $thiz->exitislock = TRUE; $thiz->privflags = 0; - + $thiz->continue = BIN5_USER_CONTINUE_INIT; + return ($thiz); } */ - + function parentcopy(&$from) { parent::copy($from); } - + function copy(&$from) { $this->parentcopy($from); - + $this->asta_card = $from->asta_card; $this->asta_pnt = $from->asta_pnt; $this->handpt = $from->handpt; $this->exitislock = $from->exitislock; $this->privflags = $from->privflags; + $this->continue = $from->continue; } - + /* CLONE NOT USED function myclone(&$from) { if (($thiz =& new User()) == FALSE) return (FALSE); - + $thiz->copy($from); - + return ($thiz); - } + } */ - + static function spawn($from, &$bri, $table, $table_pos, $get, $post, $cookie) { if (($thiz = new Bin5_user()) == FALSE) @@ -513,41 +859,43 @@ class Bin5_user extends User { } $thiz->parentcopy($from); - - /* NOTE: at this moment idx and table_pos fields have the same value + + /* NOTE: at this moment idx and table_pos fields have the same value but diffentent functions, we keep them separated for a while */ $thiz->room = $bri; - $thiz->idx = $table_pos; + $thiz->idx = $table_pos; // it is the position in the mini-room, + // not related to table pos (see below) $thiz->asta_card = -2; $thiz->asta_pnt = -1; $thiz->handpt = -1; $thiz->exitislock = TRUE; - + $thiz->continue = BIN5_USER_CONTINUE_INIT; + log_wr("Bin5 constructor"); - + $thiz->privflags = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0; $thiz->table_orig = $table; $thiz->table = 0; $thiz->table_pos = $table_pos; - + $thiz->step_inc(); return ($thiz); } - function step_set($step) + function step_set($step) { $this->step = $step & 0x7fffffff; - + return TRUE; } - + function step_inc($delta = 1) { $this->step += $delta; /* modularization because unpack() not manage unsigned 32bit int correctly */ $this->step &= 0x7fffffff; - + return (TRUE); } @@ -557,7 +905,7 @@ class Bin5_user extends User { do { if (validate_sess($sess) == FALSE) break; - + if (file_exists(BIN5_PROXY_PATH."/table".$tab_id) == FALSE) mkdir(BIN5_PROXY_PATH."/table".$tab_id, 0775, TRUE); if (($fp = @fopen(BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step", 'rb')) == FALSE) @@ -568,20 +916,20 @@ class Bin5_user extends User { break; $arr = unpack('Ls/Li', $s); fclose($fp); - + // log_rd2("A0: ".$arr[0]." A1: ".$arr[1]); return ($arr); } while (0); - + if ($fp != FALSE) fclose($fp); - + log_rd2("STEP_GET [".$sess."]: return false "); - + return (FALSE); } - function save_step() + function save_step() { do { if (validate_sess($this->sess) == FALSE) @@ -592,15 +940,15 @@ class Bin5_user extends User { break; fwrite($fp, pack("LL",$this->step, $this->idx)); fclose($fp); - - log_main("step_set [".$this->sess. "] [".$this->step."]"); - + + log_main("step_set [".$this->sess. "] [".$this->step."]"); + return (TRUE); } while (0); - + return (FALSE); } - + static function unproxy_step($tab_id, $sess) { log_rd2("UNPROXY: ".BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step"); @@ -609,15 +957,15 @@ class Bin5_user extends User { @unlink(BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step"); } - - function destroy_data($tab_id) + + function destroy_data($tab_id) { do { if (($tok = @ftok(FTOK_PATH."/bin5/table".$tab_id."/user".$this->table_pos, "B")) == -1) { log_crit("BIN5 USER DATA REMOVE FAILED 1 [".FTOK_PATH."/bin5/table".$tab_id."/user".$this->table_pos."]"); break; } - + if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE) { log_crit("BIN5 USER DATA REMOVE FAILED 2"); break; @@ -629,14 +977,14 @@ class Bin5_user extends User { $shm = FALSE; log_main("BIN5 USER DATA DESTROY SUCCESS"); - + // log_main("QUI CI ARRIVA [".$bri->user[0]->name."]"); $ret = TRUE; } while (0); - + if ($shm) shm_detach($shm); - + return ($ret); } @@ -645,7 +993,7 @@ class Bin5_user extends User { log_crit("BLOCKING_ERROR UNREC: ".($is_unrecoverable ? "TRUE" : "FALSE")); return (sprintf(($is_unrecoverable ? 'xstm.stop(); ' : '').'window.onbeforeunload = null; window.onunload = null; document.location.assign("../index.php");')); } - + protected function page_sync($sess, $page) { log_rd2("PAGE_SYNC"); @@ -660,31 +1008,31 @@ class Bin5_user extends User { GLOBAL $G_splash_w, $G_splash_h, $G_splash_timeout; $CO_splashdate = "CO_splashdate".$G_splash_idx; $$CO_splashdate = $splashdate; - + GLOBAL $S_load_stat; - + log_rd("maincheck begin"); - + $ret = FALSE; $curtime = time(); - + /* Nothing changed, return. */ - if ($cur_step == $this->step) + if ($cur_step == $this->step) return (FALSE); - + log_rd2("do other cur_stat[".$cur_stat."] user->stat[".$this->stat."] cur_step[".$cur_step."] user_step[".$this->step."]"); - + if ($cur_step == -1) { /* * if $cur_step == -1 load the current state from the main struct */ - + $S_load_stat['wR_minusone']++; - + // if ($this->the_end == TRUE) { // log_rd2("main_check: the end".var_export(debug_backtrace())); // } - + if ($this->trans_step != -1) { log_rd2("TRANS USATO ".$this->trans_step); $cur_step = $this->trans_step; @@ -694,12 +1042,12 @@ class Bin5_user extends User { log_rd2("TRANS NON ATTIVATO"); } } - - + + /* this part I suppose is read only on $this->room structure */ if ($cur_step == -1) { log_rd2("PRE-NEWSTAT"); - + /*************** * * * TABLE * @@ -720,7 +1068,7 @@ class Bin5_user extends User { else { /* $sem = Room::lock_data(FALSE); */ $S_load_stat['rU_heavy']++; - + if ($cur_step < $this->step) { do { if ($cur_step + COMM_N < $this->step) { @@ -735,9 +1083,15 @@ class Bin5_user extends User { printf("xXx LOST HISTORY!\n"); $new_step = -1; break; - } + } for ($i = $cur_step ; $i < $this->step ; $i++) { $ii = $i % COMM_N; + if ($this->comm[$ii] == "") { + if ($i == $cur_step) + continue; + else + break; + } log_rd2("ADDED TO THE STREAM: ".$this->comm[$ii]); $ret .= $this->comm[$ii]; } @@ -745,17 +1099,17 @@ class Bin5_user extends User { $new_subst = $this->subst; $new_step = $this->step; } while (0); - + log_rd2($this->step, 'index_rd.php: after ret set'); - + if ($this->the_end == TRUE) { log_rd2("LOGOUT BYE BYE!!"); log_auth($this->sess, "Explicit logout."); - + if ($this->the_end == TRUE) { $this->reset(); - - // FIXME !!! + + // FIXME !!! /* if ($this->subst == 'sitdown') { */ /* log_load("ROOM WAKEUP"); */ /* $this->room->room_wakeup($this); */ @@ -764,27 +1118,30 @@ class Bin5_user extends User { /* $this->room->room_outstandup($this); */ /* else */ /* log_rd2("LOGOUT FROM WHAT ???"); */ - + } /* if ($this->the_end == TRUE) { ... */ } /* if ($this->the_end == TRUE) { ... */ } /* if ($cur_step < $this->step) { */ - + /* Room::unlock_data($sem); */ } /* else of if ($cur_step == -1) { */ - - - return ($ret); - } // function maincheck (... - + return ($ret); + } // function maincheck (... + function continue_set($match_code) + { + $this->continue = $match_code; + } + function continue_get() { + return ($this->continue); + } } // end class Bin5_user - class Bin5 { static $delta_t = array(); @@ -794,10 +1151,10 @@ class Bin5 { var $step; // current step of the comm array var $garbage_timeout; var $shm_sz; - + var $table_idx; var $table_token; - + var $the_end; var $tok; @@ -806,41 +1163,41 @@ class Bin5 { function Bin5 ($room, $table_idx, $table_token, $get, $post, $cookie) { $this->user = array(); $this->table = array(); - + $this->the_end = FALSE; $this->shm_sz = BIN5_SHM_MIN; if (($this->tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1) { echo "FTOK FAILED"; exit; } - + $user = $room->user; $table = $room->table[$table_idx]; - + log_wr("Bin5 constructor"); - + for ($i = 0 ; $i < $table->player_n ; $i++) { $user[$table->player[$i]]->table_token = $table_token; $this->user[$i] = Bin5_user::spawn($user[$table->player[$i]], $this, $table_idx, $i, $get, $post, $cookie); } $this->table[0] = Bin5_table::spawn(&$table); - - log_main("TABLE_OLD_WIN - Bin5:".$this->table[0]->old_win); - + + log_main("TABLE_OLD_WIN - Bin5:".$this->table[0]->old_asta_win); + $this->table_idx = $table_idx; $this->table_token = $table_token; $this->garbage_timeout = 0; - + $this->delay_mgr = new Delay_Manager((GARBAGE_TIMEOUT *3.0) / 2.0); log_wr("Bin5 constructor end"); } - + function get_user($sess, &$idx) { GLOBAL $PHP_SELF; - + if (validate_sess($sess)) { for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) { if (strcmp($sess, $this->user[$i]->sess) == 0) { @@ -851,21 +1208,21 @@ class Bin5 { } } log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF)); - // for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) + // for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess)); } else { log_main(sprintf("get_user: Wrong strlen [%s]",$sess)); } - + return (FALSE); } - - + + function garbage_manager($force) { GLOBAL $G_base; - + /* Garbage collector degli utenti in timeout */ $ismod = FALSE; $curtime = time(); @@ -875,26 +1232,26 @@ class Bin5 { if ($force || $this->garbage_timeout < $curtime) { for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) { $user_cur = $this->user[$i]; - if ($user_cur->sess == "" || + if ($user_cur->sess == "" || ($user_cur->stat == 'table' && ($user_cur->subst == 'shutdowned' || $user_cur->subst == 'shutdowner'))) continue; - + if ($user_cur->lacc + EXPIRE_TIME_RD < ($curtime - $delta)) { // Auto logout dell'utente log_rd2($user_cur->sess." bin5 AUTO LOGOUT."); - + if ($user_cur->stat == 'table') { log_auth($user_cur->sess," bin5 Autologout session."); - - /* SI DELEGA AL garbage_manager principale LA RIMOZIONE DELL'UTENTE - + + /* SI DELEGA AL garbage_manager principale LA RIMOZIONE DELL'UTENTE + $tmp_sess = $user_cur->sess; $user_cur->sess = ""; Bin5_user::step_unproxy($tmp_sess); $user_cur->name = ""; $user_cur->the_end = FALSE; - + */ - + /* se gli altri utenti non erano d'accordo questo utente viene bannato */ $remcalc = $this->table[0]->exitlock_calc(&$this->user, $user_cur->table_pos); if ($remcalc < 3) { @@ -903,58 +1260,58 @@ class Bin5 { $user_cur->ip, $user_cur->sess, $user_cur->laccwr + BAN_TIME); } // $user->bantime = $user->laccwr + BAN_TIME; - + $this->table_wakeup($user_cur); } } } log_rd2($user_cur->sess." GARBAGE UPDATED!"); - + $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT; - + $ismod = TRUE; } - + $this->delay_mgr->lastcheck_set($curtime); return ($ismod); } - - function destroy_data() + + function destroy_data() { GLOBAL $sess; $ret = FALSE; $shm = FALSE; log_main("DESTROY BRISKIN5 DATA"); - + do { log_main("DESTROY2 BRISKIN5 DATA [".$this->table_idx."]"); for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $this->user[$i]->destroy_data($this->table_idx); Bin5_user::unproxy_step($this->table_idx, $this->user[$i]->sess); } - if (($tok = @ftok(FTOK_PATH."/bin5/table".$this->table_idx."/table", "B")) == -1) + if (($tok = @ftok(FTOK_PATH."/bin5/table".$this->table_idx."/table", "B")) == -1) break; if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE) break; - + if (shmop_delete($shm) == 0) { log_only("REMOVE FALLITA "); break; } - + $shm = FALSE; log_main("DESTROY2 BRISKIN5 DATA SUCCESS"); - + // log_main("QUI CI ARRIVA [".$bri->user[0]->name."]"); $ret = TRUE; } while (0); - + if ($shm) shm_detach($shm); - + return ($ret); } @@ -963,17 +1320,17 @@ class Bin5 { if (($res = file_lock(FTOK_PATH."/bin5/table".$table_idx."/table", $is_exclusive)) != FALSE) { self::$delta_t = microtime(TRUE); log_lock("LOCK table [".$table_idx."] [".self::$delta_t[$table_idx]."]"); - + return (new Vect(array('res' => $res, 'tab' => $table_idx))); } - + return (FALSE); } - + static function unlock_data($res_vect) { - GLOBAL $sess; + GLOBAL $sess; $res = $res_vect->getbyid('res'); $tab = $res_vect->getbyid('tab'); @@ -988,95 +1345,23 @@ class Bin5 { { GLOBAL $mlang_brisk, $G_lang; - if ($user->stat == 'table') { - $table = &$this->table[$user->table]; + if ($user->stat != 'table') { + return; } - - $user_mesg = substr($mesg,6); - $curtime = time(); - - $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", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['nickmust'][$G_lang]); - $user->step_inc(); - - return; - } - $user_mesg = "COMMAND ".$user_mesg; - // Search dup name - // change - // update local graph - // update remote graphs - for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) { - $user_cur = $this->user[$i]; - // if ($user_cur->sess == '' || $user_cur->stat != 'room') - if ($user_cur->sess == '') - continue; - if (strcasecmp($user_cur->name, $name_new) == 0) { - $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; + $table = &$this->table[$user->table]; + $user_mesg = substr($mesg,6); - $premsg = sprintf($mlang_brisk['nickdupl'][$G_lang], xcape($name_new)); - $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $premsg); - $user->step_inc(); - break; - } - } - if ($i == BIN5_MAX_PLAYERS) { - if ($user->flags & USER_FLAG_AUTH && strcasecmp($user->name,$name_new) != 0) { - if ($this->table[$user->table]->auth_only == TRUE) { - $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; - $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['authchan'][$G_lang]); - $user->step_inc(); - return; - } - else { - $user->flags &= ~USER_FLAG_AUTH; // Remove auth if name changed - } - } - - $user->name = $name_new; + $ret = FALSE; + $mesg = ""; - log_main($user->sess." chatt_send start set"); - + $dt = date("H:i ", $curtime); + if (strncmp($user_mesg, "/cont ", 6) == 0) { + log_main($user->sess." chatt_send BEGIN"); - for ($i = 0 ; $i < BIN5_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 == '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([%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"]); ', - $this->user[$table->player[($user_cur->table_pos) % BIN5_PLAYERS_N]]->flags, - xcape($this->user[$table->player[($user_cur->table_pos) % BIN5_PLAYERS_N]]->name), - - $this->user[$table->player[($user_cur->table_pos+1) % BIN5_PLAYERS_N]]->flags, - xcape($this->user[$table->player[($user_cur->table_pos+1) % BIN5_PLAYERS_N]]->name), - - $this->user[$table->player[($user_cur->table_pos+2) % BIN5_PLAYERS_N]]->flags, - xcape($this->user[$table->player[($user_cur->table_pos+2) % BIN5_PLAYERS_N]]->name), - - (BIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+3) % BIN5_PLAYERS_N]]->flags), - (BIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3) % BIN5_PLAYERS_N]]->name)), - - (BIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+4) % BIN5_PLAYERS_N]]->flags), - (BIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4) % BIN5_PLAYERS_N]]->name))); - if ($user_cur == $user) { - $user_cur->comm[$user_cur->step % COMM_N] .= $user_cur->myname_innerHTML(); - } - $user_cur->step_inc(); - } - } - } + $match_id = substr($user_mesg, 6); + $table->match_continue($this, $user, $match_id); } else { for ($i = 0 ; $i < ($user->stat == 'room' ? BIN5_MAX_PLAYERS : BIN5_PLAYERS_N) ; $i++) { @@ -1088,7 +1373,7 @@ class Bin5 { 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", [%d, "%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape($user_mesg)); @@ -1107,11 +1392,11 @@ class Bin5 { $curtime = time(); log_main("BIN5_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 @@ -1128,11 +1413,11 @@ class Bin5 { $this->the_end = TRUE; } - + /* * If all players are freezed the room garbage_manager clean up table and users. - */ - function is_abandoned() + */ + function is_abandoned() { $is_ab = TRUE; $curtime = time(); @@ -1142,7 +1427,7 @@ class Bin5 { for ($i = 0 ; $i < $table->player_n ; $i++) { $user_cur = &$this->user[$i]; - if ($user_cur->lacc + (EXPIRE_TIME_RD * 2) >= $curtime) { + if ($user_cur->lacc + (EXPIRE_TIME_RD * 2) >= $curtime) { $is_ab = FALSE; break; } @@ -1156,7 +1441,7 @@ class Bin5 { GLOBAL $G_black_list; printf("NEW_SOCKET (root): %d\n", intval($new_socket)); - + $enc = get_encoding($header); if (isset($header['User-Agent'])) { if (strstr($header['User-Agent'], "MSIE")) { @@ -1171,10 +1456,10 @@ class Bin5 { } force_no_cache($header_out); - if (($table_idx = gpcs_var('table_idx', $get, $post, $cookie)) === FALSE) + if (($table_idx = gpcs_var('table_idx', $get, $post, $cookie)) === FALSE) unset($table_idx); - - if (($table_token = gpcs_var('table_token', $get, $post, $cookie)) === FALSE) + + if (($table_token = gpcs_var('table_token', $get, $post, $cookie)) === FALSE) unset($table_token); @@ -1185,10 +1470,10 @@ class Bin5 { bin5_index_main($transp_type, $header_out, $addr, $get, $post, $cookie); $content = ob_get_contents(); ob_end_clean(); - + $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content); return TRUE; - + break; case "index_wr.php": // FIXME $content can be unset @@ -1208,7 +1493,7 @@ class Bin5 { } $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content); return TRUE; - + break; case "index_rd_ifra.php": if (($transp = gpcs_var('transp', $get, $post, $cookie)) === FALSE) @@ -1236,13 +1521,13 @@ class Bin5 { printf("CLOSE AND OPEN AGAIN ON IFRA2\n"); $user->rd_socket_set(NULL); } - + $content = ""; $user->stream_init($s_a_p->rndstr, $enc, $header, $header_out, $content, $get, $post, $cookie); $response = headers_render($header_out, -1).$user->chunked_content($content); $response_l = mb_strlen($response, "ASCII"); - + $wret = @fwrite($new_socket, $response, $response_l); if ($wret < $response_l) { printf("TROUBLES WITH FWRITE: %d\n", $wret); @@ -1252,17 +1537,17 @@ class Bin5 { $user->rd_cache_set(""); } fflush($new_socket); - - + + $s_a_p->socks_set($new_socket, $user, NULL); $user->rd_socket_set($new_socket); printf(" - qui ci siamo - "); return TRUE; } while (FALSE); - + return FALSE; break; - + default: return FALSE; break; @@ -1290,86 +1575,11 @@ function locshm_exists($tok) return (TRUE); } - -} - - -// rendiamo qui l'elenco dei punti come return della func -function calculate_points(&$table) -{ - GLOBAL $G_all_points; - - $ret = array(); - $pro = 0; - - if ($table->asta_pnt == 60) - $table->asta_pnt = 61; - - $table->old_reason = ""; - $table->old_win = $table->asta_win; - $table->old_friend = $table->friend; - $table->old_asta_pnt = $table->asta_pnt; - $table->old_mult = $table->mult; - - // count points for the temporary 2 teams - for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) { - // for ($i = 0 ; $i < 40 ; $i++) { - $ctt = $table->card[$i]->value % 10; - $own = $table->card[$i]->owner; - if ($own == $table->asta_win || $own == $table->friend) - $pro += $G_all_points[$ctt]; - } - - log_wr(sprintf("PRO: [%d]", $pro)); - - // PATTA case ! - if ($table->asta_pnt == 61 && $pro == 60) { - $table->points[$table->points_n % MAX_POINTS] = array(); - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $table->points[$table->points_n % MAX_POINTS][$i] = 0; - $ret[$i] = 0; - } - $table->points_n++; - $table->old_pnt = $pro; - $table->mult += 1; - - return($ret); - } - - if ($pro >= $table->asta_pnt) - $sig = 1; - else - $sig = -1; - $table->points[$table->points_n % MAX_POINTS] = array(); - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - if ($i == $table->asta_win) - $pt = ($i == $table->friend ? 4 : 2); - else if ($i == $table->friend) - $pt = 1; - else - $pt = -1; - - - - log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pt)); - - $pt = $pt * $sig * $table->multer(TRUE) * ($pro == 120 ? 2 : 1); - - log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $table->multer(TRUE), ($pro == 120 ? 2 : 1))); - - $table->points[$table->points_n % MAX_POINTS][$i] = $pt; - $table->total[$i] += $pt; - $ret[$i] = $pt; - } - $table->points_n++; - $table->old_pnt = $pro; - $table->mult = 0; - - return($ret); } -/* show table + +/* show table is_transition (is from room to table ?) is_again (is another game) @@ -1396,7 +1606,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) /* BACKGROUND */ $ret .= "background_set();"; - + /* USERS INFO */ $ret .= $user->myname_innerHTML(); $ret .= sprintf('set_names([%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"]); ', @@ -1420,7 +1630,10 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) $ret .= show_table_info(&$bri, &$table, $table_pos); $ret .= "setTimeout(preload_images, 500, g_preload_img_arr, g_imgct);"; } - if (!$is_again) + else { + $ret .= "\$('imgct').innerHTML = \$('imgct').innerHTML = mlang_commons['imgload_a'][g_lang]+\"100%.\";"; + } + if (!$is_again) $ret .= table_welcome($user); if ($is_transition && !$is_again) { // appena seduti al tavolo, play della mucca @@ -1431,11 +1644,11 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) /* CARDS */ if ($is_transition) { // && $user->subst == "asta" superfluo $ret .= "|"; - - for ($i = 0 ; $i < 8 ; $i++) { + + for ($i = 0 ; $i < BIN5_CARD_HAND ; $i++) { for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) { $ct = 0; - for ($o = 0 ; $o < (BIN5_PLAYERS_N == 5 ? 40 : 24) && $ct < $i+1 ; $o++) { + for ($o = 0 ; $o < (BIN5_CARD_HAND * BIN5_PLAYERS_N) && $ct < $i+1 ; $o++) { // for ($o = 0 ; $o < 40 && $ct < $i+1 ; $o++) { if ($table->card[$o]->owner == (($e + $table->gstart) % BIN5_PLAYERS_N)) { $ct++; @@ -1444,13 +1657,13 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) } } log_rd("O ".$o." VAL ".$table->card[$o]->value." Owner: ".$table->card[$o]->owner); - - $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % BIN5_PLAYERS_N, + + $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % BIN5_PLAYERS_N, $i, ((($e + BIN5_PLAYERS_N - $table_pos + $table->gstart) % BIN5_PLAYERS_N) == 0 ? - $table->card[$o]->value : -1), + $table->card[$o]->value : -1), ($i == 7 && $e == (BIN5_PLAYERS_N - 1) ? 1 : 0.5),$i+1); } - } + } } else { $taked = array(0,0,0,0,0); @@ -1458,7 +1671,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) $ontabl = array(-1,-1,-1,-1,-1); $cards = array(); - for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) { + for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { // for ($i = 0 ; $i < 40 ; $i++) { if ($table->card[$i]->stat == 'hand') { if ($table->card[$i]->owner == $table_pos) { @@ -1482,9 +1695,9 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) /* Set ours cards. */ $oursarg = ""; - for ($i = 0 ; $i < $inhand[$table_pos] ; $i++) + for ($i = 0 ; $i < $inhand[$table_pos] ; $i++) $oursarg .= ($i == 0 ? "" : ", ").$cards[$i]; - for ($i = $inhand[$table_pos] ; $i < 8 ; $i++) + for ($i = $inhand[$table_pos] ; $i < BIN5_CARD_HAND ; $i++) $oursarg .= ($i == 0 ? "" : ", ")."-1"; $ret .= sprintf('card_setours(%s);', $oursarg); @@ -1492,11 +1705,11 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { /* Qui sotto al posto di + 1 c'era + ->gstart ... credo in modo errato */ $ret .= sprintf('cards_dispose(%d,%d,%d);', $i, - ($inhand[$i] <= 8 ? $inhand[$i] : 8) , $taked[$i]); + ($inhand[$i] <= BIN5_CARD_HAND ? $inhand[$i] : BIN5_CARD_HAND), $taked[$i]); if ($ontabl[$i] != -1) { - $ret .= sprintf('card_place(%d,%d,%d,%d,%d);',$i, $inhand[$i], - $table->card[$ontabl[$i]]->value, + $ret .= sprintf('card_place(%d,%d,%d,%d,%d);',$i, $inhand[$i], + $table->card[$ontabl[$i]]->value, $table->card[$ontabl[$i]]->x, $table->card[$ontabl[$i]]->y); } } @@ -1509,7 +1722,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) $showst = ""; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; - $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), + $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), ($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt)); } if (BIN5_PLAYERS_N == 3) @@ -1525,8 +1738,8 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) else { /* show auction */ if ($table_pos == ($table->gstart % BIN5_PLAYERS_N) && - $table->asta_win == -1) - $ret .= sprintf('dispose_asta(%d,%d, %s);', + $table->asta_win == -1) + $ret .= sprintf('dispose_asta(%d,%d, %s);', $table->asta_card + 1, $table->asta_pnt+1, ($user->handpt <= 2 ? "true" : "false")); else $ret .= sprintf('dispose_asta(%d,%d, %s);', @@ -1535,13 +1748,13 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) /* Remark */ if ($table->asta_win == -1) { // auction case - if ($table_pos == ($table->gstart % BIN5_PLAYERS_N)) + if ($table_pos == ($table->gstart % BIN5_PLAYERS_N)) $ret .= "remark_on();"; else $ret .= "remark_off();"; } else { // chooseed case - if ($table_pos == $table->asta_win) + if ($table_pos == $table->asta_win) $ret .= "remark_on();"; else $ret .= "remark_off();"; @@ -1549,14 +1762,14 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) } else if ($user->subst == 'game') { /* HIGHLIGHT */ - if (($table->gstart + $table->turn) % BIN5_PLAYERS_N == $table_pos) + if (($table->gstart + $table->turn) % BIN5_PLAYERS_N == $table_pos) $ret .= "is_my_time = true; remark_on();"; else $ret .= "remark_off();"; - + /* WHO CALL AND WHAT */ $ret .= briscola_show($bri, $table, $user); - + } return ($ret); } // end function show_table(... @@ -1570,14 +1783,14 @@ function calculate_winner(&$table) $cur_val = 100; $cur_seed = $table->briscola - ($table->briscola % 10); - for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) { + for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { // for ($i = 0 ; $i < 40 ; $i++) { if ($table->card[$i]->stat != "table") continue; log_wr(sprintf("Card On table: [%d]", $i)); - $v = $table->card[$i]->value; + $v = $table->card[$i]->value; $ontab[$table->card[$i]->owner] = $v; $ontid[$table->card[$i]->owner] = $i; /* se briscola setto il flag */ @@ -1616,9 +1829,9 @@ function show_table_info(&$bri, &$table, $table_pos) $pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS; $noty = sprintf(''); - + // Names. - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) $noty .= sprintf('', xcape($bri->user[$table->player[$i]]->name)); $noty .= sprintf(""); @@ -1627,68 +1840,23 @@ function show_table_info(&$bri, &$table, $table_pos) for ($i = $pnt_min ; $i < $table->points_n ; $i++) { $noty .= sprintf('', $i+1); - for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) + for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) $noty .= sprintf('', $table->points[$i % MAX_POINTS][$e]); $noty .= ""; } // Total points. $noty .= ''; - for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) + for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) $noty .= sprintf('', $table->total[$e]); $noty .= "
%s
%d%d
Tot.%d
"; - + $noty .= "
"; if ($table->old_reason != "") { - $noty .= sprintf("
%s
", xcape($table->old_reason)); + $noty .= $table->old_reason; } - if ($table->old_win != -1) { - log_main("TABLE_OLD_WIN:".$table->old_win); - $win = $table->player[$table->old_win]; - log_main("TABLE_OLD_FRIEND:".$table->old_friend); - $fri = $table->player[$table->old_friend]; - - $wol = game_result($table->old_asta_pnt, $table->old_pnt); - - if ($win != $fri) { - /* MLANG: "
Nell'ultima mano ha chiamato %s, il socio era %s,
", "hanno fatto cappotto EBBRAVI!.
", "dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", "
Nell'ultima mano %s si è chiamato in mano,
", "ha fatto cappotto EBBRAVO!.
", "doveva fare %s punti e ne ha fatti %d: ha %s.
", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */ - - $noty .= sprintf($mlang_bin5_bin5['info_part'][$G_lang], - xcape($bri->user[$win]->name), - xcape($bri->user[$fri]->name)); - if ($table->old_pnt == 120) { - $noty .= sprintf($mlang_bin5_bin5['info_capp'][$G_lang]); - } - else { - $noty .= sprintf($mlang_bin5_bin5['info_pnt'][$G_lang], - ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt : - $mlang_bin5_bin5['info_more'][$G_lang]), $table->old_pnt, - ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : $mlang_bin5_bin5['info_lost'][$G_lang]))); - } - } - else { - $noty .= sprintf($mlang_bin5_bin5['info_alon'][$G_lang], - xcape($bri->user[$win]->name)); - if ($table->old_pnt == 120) { - $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang]); - } - else { - $noty .= sprintf($mlang_bin5_bin5['info_apnt'][$G_lang], - - ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt : - $mlang_bin5_bin5['info_more'][$G_lang]), $table->old_pnt, - - ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : $mlang_bin5_bin5['info_lost'][$G_lang]))); - } - } - $old_multer = $table->multer(FALSE); - if ($old_multer > 1) { - $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], multoval($old_multer)); - } - $noty .= "

"; - } /* MLANG: "Fai tu il mazzo,", "Il mazzo a $unam," */ - if ($table->mazzo == $table_pos) + if ($table->mazzo == $table_pos) $noty .= $mlang_bin5_bin5['info_yshuf'][$G_lang]; else { $unam = xcape($bri->user[$table->player[$table->mazzo]]->name); @@ -1698,7 +1866,7 @@ function show_table_info(&$bri, &$table, $table_pos) if ($user->subst == 'asta') { if ($table->asta_win == -1) // auction case $curplayer = $table->gstart % BIN5_PLAYERS_N; - else + else $curplayer = $table->asta_win; } else if ($user->subst == 'game') { @@ -1713,20 +1881,24 @@ function show_table_info(&$bri, &$table, $table_pos) $unam = xcape($bri->user[$table->player[$curplayer]]->name); $noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam); } - + $multer = $table->multer(TRUE); if ($multer > 1) { $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($multer) ); } $noty .= "

"; + if ($table->match_id != -1) { + $noty .= sprintf($mlang_bin5_bin5['info_match'][$G_lang], $table->match_id); + $noty .= "

"; + } $ret .= show_notify($noty, 3000, $mlang_bin5_bin5['btn_bkgame'][$G_lang], 500, 400); - /* NOTE: show_notify($noty, 3000, "torna alla partita", 500, - * 130 + ($table->points_n > 0 ? 50 : 0) + + /* NOTE: show_notify($noty, 3000, "torna alla partita", 500, + * 130 + ($table->points_n > 0 ? 50 : 0) + * (120 * ($table->points_n / MAX_POINTS))); - * will be used when we refact notify js function following - * photoo class logic - */ - + * will be used when we refact notify js function following + * photoo class logic + */ + return ($ret); } @@ -1748,9 +1920,9 @@ function briscola_show($bri, $table, $user) $ptnadd = ""; $ret = ""; - if ($table->asta_card == 9) + if ($table->asta_card == 9) $ptnadd = sprintf($mlang_bin5_bin5['call_wptn'][$G_lang], $table->asta_pnt); - + /* text of caller cell */ if ($user->table_pos == $table->asta_win) { $prestr = sprintf('$("callerinfo").innerHTML = "%s";', $mlang_bin5_bin5['call_ycall'][$G_lang]); @@ -1758,7 +1930,7 @@ function briscola_show($bri, $table, $user) } else { $prestr = sprintf('$("callerinfo").innerHTML = "%s";', $mlang_bin5_bin5['call_call'][$G_lang]); - $ret .= sprintf($prestr, + $ret .= sprintf($prestr, xcape($bri->user[$table->player[$table->asta_win]]->name), $ptnadd); } $ret .= sprintf('set_iscalling(%d);', ($table->asta_win - $user->table_pos + BIN5_PLAYERS_N) % BIN5_PLAYERS_N); @@ -1771,7 +1943,7 @@ function briscola_show($bri, $table, $user) $ret .= sprintf('$("astalascio").style.visibility = "";'); $ret .= sprintf('$("asta").style.visibility = "hidden";'); $ret .= sprintf('show_astat(-2,-2,-2,-2,-2);'); - + return ($ret); } @@ -1794,7 +1966,7 @@ function game_result($asta_pnt, $pnt) } } -function log_points($remote_addr, $curtime, $user, $where, $mesg) +function log_points($remote_addr, $curtime, $user, $where, $mesg) { if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) { /* Unix time | session | nickname | IP | where was | mesg */ @@ -1805,4 +1977,111 @@ function log_points($remote_addr, $curtime, $user, $where, $mesg) } } +function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?", + $old_pnt = -1, $old_asta_pnt = -1) +{ + GLOBAL $G_lang, $mlang_bin5_bin5; + + if ($form == 'html') { + $tg_br = "
"; + $tg_hr = "
"; + $tg_bo = ""; + $tg_bc = ""; + $win_name = xcape($win_name); + $fri_name = xcape($fri_name); + } + else { + $tg_br = " "; + $tg_hr = " "; + $tg_bo = ""; + $tg_bc = ""; + } + + if ($act == BIN5_RULES_OLDSCHEMA) { + return (""); + } + else if ($act == BIN5_RULES_ALLPASS) { + return (sprintf($mlang_bin5_bin5['info_alpa'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc)); + } + else if ($act == BIN5_RULES_ABANDON) { + return (sprintf($mlang_bin5_bin5['info_aban'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name)); + } + else { + $wol = game_result($old_asta_pnt, $old_pnt); + + $noty = ""; + + if ($win != $fri) { // not alone case + /* MLANG: "
Nell'ultima mano ha chiamato %s, il socio era %s,
", "hanno fatto cappotto EBBRAVI!.
", "dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", "
Nell'ultima mano %s si è chiamato in mano,
", "ha fatto cappotto EBBRAVO!.
", "doveva fare %s punti e ne ha fatti %d: ha %s.
", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */ + + $noty .= sprintf($mlang_bin5_bin5['info_part'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name, + $fri_name); + if ($old_pnt == 120) { + $noty .= sprintf($mlang_bin5_bin5['info_capp'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc ); + } + else { + if ($old_asta_pnt > 61) { + $noty .= sprintf($mlang_bin5_bin5['info_alea'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_asta_pnt, $old_pnt, + ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : + $mlang_bin5_bin5['info_lost'][$G_lang]))); + } + else { + $noty .= sprintf($mlang_bin5_bin5['info_more'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_pnt, + ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : + $mlang_bin5_bin5['info_lost'][$G_lang]))); + } // else of if ($old_asta_pnt > 61) { + } // else of if ($old_pnt == 120) { + } // if ($win != $fri) { // not alone case + else { + $noty .= sprintf($mlang_bin5_bin5['info_alon'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name); + if ($old_pnt == 120) { + $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc); + } + else { + if ($old_asta_pnt > 61) { + $noty .= sprintf($mlang_bin5_bin5['info_aleaa'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_asta_pnt, $old_pnt, + ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : + $mlang_bin5_bin5['info_lost'][$G_lang]))); + } + else { + $noty .= sprintf($mlang_bin5_bin5['info_morea'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_pnt, + ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : + $mlang_bin5_bin5['info_lost'][$G_lang]))); + } + } + } + } + + $old_multer = Bin5_table::s_multer($old_mult, $old_asta_pnt); + if ($old_multer > 1) { + $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + multoval($old_multer)); + } + $noty .= sprintf('%2$s%1$s', $tg_br, $tg_hr); + + return ($noty); +} + ?> diff --git a/web/briskin5/Obj/placing.phh b/web/briskin5/Obj/placing.phh index 71cbca1..fd932b4 100644 --- a/web/briskin5/Obj/placing.phh +++ b/web/briskin5/Obj/placing.phh @@ -96,13 +96,13 @@ function ptsgam_cmp($a, $b) } /* types of placing based on delta time */ -define(TY_DTIME_TRI, 0); -define(TY_DTIME_MON, 1); -define(TY_DTIME_WEE, 2); +define('TY_DTIME_TRI', 0); +define('TY_DTIME_MON', 1); +define('TY_DTIME_WEE', 2); /* subtypes of placing based on number of played games */ -define(SUBTY_FREQ_LO, 0); -define(SUBTY_FREQ_HI, 1); +define('SUBTY_FREQ_LO', 0); +define('SUBTY_FREQ_HI', 1); function placings_show($user) diff --git a/web/briskin5/briskin5.js b/web/briskin5/briskin5.js index 32545f7..2e8d76c 100644 --- a/web/briskin5/briskin5.js +++ b/web/briskin5/briskin5.js @@ -210,7 +210,7 @@ function table_init() { show_astat(-2,-2,-2,-2,-2); set_iscalling(-1); - for (i=0 ; i < 8 ; i++) { + for (i=0 ; i < CARD_HAND ; i++) { Drag.init($("card" + i), card_mouseup_cb); for (e = 0 ; e < PLAYERS_N ; e++) $("card"+sux[e]+i).style.visibility = "hidden"; @@ -220,7 +220,7 @@ function table_init() { $("takes"+sux[i]).style.visibility = "hidden"; } - for (i = 0 ; i < 8 ; i++) { + for (i=0 ; i < CARD_HAND ; i++) { cards_pos[i] = i; cards_ea_pos[i] = i; cards_ne_pos[i] = i; diff --git a/web/briskin5/dnd.js b/web/briskin5/dnd.js index 1a5c6f5..76e4fab 100644 --- a/web/briskin5/dnd.js +++ b/web/briskin5/dnd.js @@ -20,8 +20,10 @@ * Suite 330, Boston, MA 02111-1307, USA. * */ - +/* number of players */ var PLAYERS_N = 3; +/* initial number of cards in hand */ +var CARD_HAND = 3; /* current manche */ var manche = 1; /* cards on hands */ @@ -65,16 +67,16 @@ var G_take_time = 500; /* suffix to add to images name */ var sux = new Array( "", "_ea", "", "", "_we"); -var cards_pos = new Array (8); -var cards_ea_pos = new Array (8); -var cards_ne_pos = new Array (8); -var cards_nw_pos = new Array (8); -var cards_we_pos = new Array (8); +var cards_pos = new Array (CARD_HAND); +var cards_ea_pos = new Array (CARD_HAND); +var cards_ne_pos = new Array (CARD_HAND); +var cards_nw_pos = new Array (CARD_HAND); +var cards_we_pos = new Array (CARD_HAND); var take_x = new Array(562, 745, 452, 30, 52); var take_y = new Array(545, 177, 70, 62,155); -for (i = 0 ; i < 8 ; i++) { +for (i = 0 ; i < CARD_HAND ; i++) { cards_pos[i] = i; cards_ea_pos[i] = i; cards_ne_pos[i] = i; @@ -110,7 +112,7 @@ function cards_dispose_so(car_n, tak_n) for (i = 0 ; i < car_n ; i++) { $("card" + cards_pos[i]).style.left = start + (i * inter); $("card" + cards_pos[i]).style.top = 475 + (125 - cards_height)/2; - $("card" + cards_pos[i]).style.zIndex = 8 - i; + $("card" + cards_pos[i]).style.zIndex = CARD_HAND - i; $("card" + cards_pos[i]).style.visibility = "visible"; } @@ -227,7 +229,7 @@ function cards_dispose_ea(car_n, tak_n) { for (i = 0 ; i < car_n ; i++) { $("card_ea" + cards_ea_pos[i]).style.left = 675 + (125 - cards_height)/2; $("card_ea" + cards_ea_pos[i]).style.top = start + (i * inter); - $("card_ea" + cards_ea_pos[i]).style.zIndex = 8 - i; + $("card_ea" + cards_ea_pos[i]).style.zIndex = CARD_HAND - i; $("card_ea" + cards_ea_pos[i]).style.visibility = "visible"; // alert("xx "+ (675 + (125 - cards_height)/2) +" yy " + start + (i * inter)); } @@ -273,7 +275,7 @@ function cards_dispose_we(car_n, tak_n) for (i = 0 ; i < car_n ; i++) { $("card_we" + cards_we_pos[i]).style.left = (125 - cards_height)/2; $("card_we" + cards_we_pos[i]).style.top = start - (i * inter); - $("card_we" + cards_we_pos[i]).style.zIndex = 8 - i; + $("card_we" + cards_we_pos[i]).style.zIndex = CARD_HAND - i; $("card_we" + cards_we_pos[i]).style.visibility = "visible"; } @@ -510,7 +512,7 @@ function card_setours(zer,uno,due,tre,qua,cin,sei,set) var i; var arg = new Array(zer,uno,due,tre,qua,cin,sei,set); - for (i = 0 ; i < 8 ; i++) { + for (i = 0 ; i < CARD_HAND ; i++) { $("card"+i).src = getcard(arg[i], 0); $("card"+i).briskid = arg[i]; } diff --git a/web/briskin5/explain.php b/web/briskin5/explain.php index e1852ab..dd09f68 100644 --- a/web/briskin5/explain.php +++ b/web/briskin5/explain.php @@ -40,11 +40,11 @@ require_once("Obj/briskin5.phh"); require_once("Obj/placing.phh"); function main() { - - if (file_exists(LEGAL_PATH."/explain.log")) { - $ret .= file_get_contents(LEGAL_PATH."/explain.log"); - } - echo "$ret"; + $ret = ""; + if (file_exists(LEGAL_PATH."/explain.log")) { + $ret .= file_get_contents(LEGAL_PATH."/explain.log"); + } + echo "$ret"; } ?> diff --git a/web/briskin5/index_wr.php b/web/briskin5/index_wr.php index 98fd79b..27e32d1 100644 --- a/web/briskin5/index_wr.php +++ b/web/briskin5/index_wr.php @@ -1,9 +1,9 @@ get_user($sess, &$idx)) == FALSE) { echo "Get User Error"; log_wr("Get User Error"); @@ -83,18 +83,18 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } $argz = explode('|', $mesg); - + log_wr('POSTSPLIT: '.$argz[0].' user->stat: ['.$user->stat.']'); log_wr($user->step, 'bin::index_wr.php: after get_user()'); $user->lacc = $curtime; - + if ($argz[0] == 'ping') { log_wr("PING RECEIVED"); } else if (false && $argz[0] == 'shutdown') { log_auth($user_cur->sess, "Shutdown session. delegate to room gc the autologout"); - + log_rd2("bin5/index_wr.php: AUTO LOGOUT."); if ($user->stat == 'table') { $bri->table_wakeup($user); @@ -112,7 +112,7 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) else if ($user->stat == 'table') { $user->laccwr = time(); $table = $bri->table[$user->table]; - + if ($argz[0] == 'tableinfo') { log_wr("PER DI TABLEINFO"); $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; @@ -125,7 +125,7 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } else if ($argz[0] == 'preferences_update') { log_wr("PER DI PREFERENCES_UPDATE"); - + if ($CO_bin5_pref_ring_endauct == "true") $user->privflags |= BIN5_USER_FLAG_RING_ENDAUCT; else @@ -133,12 +133,12 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } else if ($argz[0] == 'logout') { $remcalc = $argz[1]; - + if ($user->exitislock == TRUE) { $remcalc++; $user->exitislock = FALSE; } - + $logout_cont = TRUE; if ($remcalc >= 3) { $lockcalc = $table->exitlock_calc(&$bri->user, $user->table_pos); @@ -146,7 +146,7 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; $user->comm[$user->step % COMM_N] .= $table->exitlock_show(&$bri->user, $user->table_pos); $user->comm[$user->step % COMM_N] .= show_notify("
I dati presenti sul server non erano allineati con quelli inviati dal tuo browser, adesso lo sono. Riprova ora.", 2000, "torna alla partita.", 400, 100); - + log_wr($user->comm[$user->step % COMM_N]); $user->step_inc(); $logout_cont = FALSE; @@ -158,7 +158,7 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) $user->ip, $user->sess, $user->laccwr + BAN_TIME); } // $user->bantime = $user->laccwr + BAN_TIME; - + if ($logout_cont == TRUE) { $bri->table_wakeup(&$user); } @@ -166,14 +166,14 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) else if ($argz[0] == 'exitlock') { if ($user->exitislock == TRUE) { $user->exitislock = ($user->exitislock == TRUE ? FALSE : TRUE); - for ($ct = 0, $i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + for ($ct = 0, $i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur[$i] = &$bri->user[$table->player[$i]]; if ($user_cur[$i]->exitislock == FALSE) $ct++; } for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $ret = sprintf('gst.st = %d;', $user_cur[$i]->step+1); - $ret .= sprintf('exitlock_show(%d, %s);', $ct, + $ret .= sprintf('exitlock_show(%d, %s);', $ct, ($user_cur[$i]->exitislock ? 'true' : 'false')); $user_cur[$i]->comm[$user_cur[$i]->step % COMM_N] = $ret; log_wr($user_cur[$i]->comm[$user_cur[$i]->step % COMM_N]); @@ -182,38 +182,55 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } } else if ($user->subst == 'asta') { - if ($argz[0] == 'lascio' && $user->handpt <= 2) { - $index_cur = $table->gstart % BIN5_PLAYERS_N; - - log_wr(sprintf("GIOCO FINITO !!!")); - - $table->mult += 1; - $table->old_reason = sprintf("Ha lasciato %s perché aveva al massimo 2 punti.", xcape($user->name)); - - // Non si cambia mazzo se si abbandona la partita - // $table->game_next(); - $table->game_init(&$bri->user); - - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bri->user[$table->player[$i]]; - - $ret = sprintf('gst.st = %d;', $user_cur->step+1); - $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE); - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); + if ($argz[0] == 'lascio') { + // && $user->handpt <= 2) { + /* $index_cur = $table->gstart % BIN5_PLAYERS_N; */ + + /* log_wr(sprintf("GIOCO FINITO !!!")); */ + + /* $table->mult += 1; */ + /* $table->old_reason = sprintf("Ha lasciato %s perché aveva al massimo 2 punti.", xcape($user->name)); */ + + /* // Non si cambia mazzo se si abbandona la partita */ + /* $table->game_next(0); */ + + /* if ($user->table_orig < TABLES_AUTH_N) { */ + /* require_once("../Obj/dbase_".$G_dbasetype.".phh"); */ + + /* if (($bdb = BriskDB::create()) != FALSE) { */ + /* $bdb->bin5_points_save($curtime, $table, $user->table_orig, $ucodes, $pt_cur); */ + /* unset($bdb); */ + /* } */ + /* else { */ + /* log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); */ + /* } */ + /* log_points($curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); */ + /* } */ + + /* $table->game_init(&$bri->user); */ + + if ($table->rules_engine(&$bri, $curtime, BIN5_RULES_ABANDON, $user)) { + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$table->player[$i]]; + + $ret = sprintf('gst.st = %d;', $user_cur->step+1); + $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE); + $user_cur->comm[$user_cur->step % COMM_N] = $ret; + $user_cur->step_inc(); + } } } else if ($argz[0] == 'asta') { $again = TRUE; - + $index_cur = $table->gstart % BIN5_PLAYERS_N; if ($user->table_pos == $index_cur && $table->asta_pla[$index_cur]) { $a_card = $argz[1]; $a_pnt = $argz[2]; - + log_wr("CI SIAMO a_card ".$a_card." asta_card ".$table->asta_card); - + // Abbandono dell'asta if ($a_card <= -1) { log_wr("Abbandona l'asta."); @@ -227,8 +244,8 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) $again = FALSE; else if ($a_card == 9 && $a_pnt > ($table->asta_pnt >= 61 ? $table->asta_pnt : 60) && $a_pnt <= 120) $again = FALSE; - - + + if ($again == FALSE) { log_wr("NUOVI ORZI."); $user->asta_card = $a_card; @@ -239,36 +256,34 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } } } - - - + if ($again) { // Qualcosa non andato bene, rifare - $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1, + $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1, ($table->asta_pnt > 60 ? $table->asta_pnt + 1 : 61) ); $user->comm[$user->step % COMM_N] = $ret; $user->step_inc(); - + log_wr("Ripetere."); } else { /* next step */ - $showst = "show_astat("; + $showst = "show_astat("; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; - $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), + $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), ($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt)); } if (BIN5_PLAYERS_N == 3) $showst .= ",-2,-2"; $showst .= ");"; - + $maxcard = -2; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; if ($maxcard < $user_cur->asta_card) $maxcard = $user_cur->asta_card; } - + if (($table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) && !($table->asta_card == 9 && $table->asta_pnt == 120)) { log_wr("ALLOPPA QUI"); @@ -280,13 +295,13 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) break; } } - - + + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst); - if ($user_cur->table_pos == ($table->gstart % BIN5_PLAYERS_N)) - $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();', + if ($user_cur->table_pos == ($table->gstart % BIN5_PLAYERS_N)) + $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();', $table->asta_card + 1, $table->asta_pnt+1, ($user_cur->handpt <= 2 ? "true" : "false")); else $ret .= sprintf('dispose_asta(%d,%d, %s); remark_off();', @@ -297,22 +312,16 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } else if ($table->asta_pla_n == 0) { log_wr("PASSANO TUTTI!"); - - log_wr(sprintf("GIOCO FINITO !!!")); - - $table->old_reason = "Hanno passato tutti."; - $table->mult += 1; - - $table->game_next(); - $table->game_init(&$bri->user); - - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bri->user[$table->player[$i]]; - - $ret = sprintf('gst.st = %d;', $user_cur->step+1); - $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE); - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); + + if ($table->rules_engine(&$bri, $curtime, BIN5_RULES_ALLPASS, $user)) { + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$table->player[$i]]; + + $ret = sprintf('gst.st = %d;', $user_cur->step+1); + $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE); + $user_cur->comm[$user_cur->step % COMM_N] = $ret; + $user_cur->step_inc(); + } } } else { @@ -320,13 +329,13 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) // if a_pnt == 120 supergame ! else abbandono if ($a_pnt == 120 || $user->asta_card != -1) { $chooser = $index_cur; - for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) + for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) if ($i != $chooser) $table->asta_pla[$i] = FALSE; } else { /* - $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();", + $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();", $user->step+1, $table->asta_card + 1,-($table->asta_pnt)); $user->step_inc(); */ @@ -338,21 +347,21 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } } $table->asta_win = $chooser; - + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; $ret = sprintf('gst.st = %d; %s dispose_asta(%d, %d, false);', $user_cur->step+1, $showst, $table->asta_card + 1,-($table->asta_pnt)); - + if ($i == $chooser) { $ret .= "choose_seed(". $table->asta_card."); remark_on();"; } else { $ret .= "remark_off();"; } - + $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); + $user_cur->step_inc(); } } } @@ -363,7 +372,7 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) } /* asta::choose */ else if ($argz[0] == 'choose') { - if ($table->asta_win > -1 && + if ($table->asta_win > -1 && $user->table_pos == $table->asta_win) { $a_brisco = $argz[1]; if ($a_brisco >= 0 && $a_brisco < 40) { @@ -372,177 +381,145 @@ function bin5_index_wr_main(&$bri, $remote_addr_full, $get, $post, $cookie) log_wr("GSTART 2"); $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N; log_wr("Setta la briscola a ".$a_brisco); - + $chooser = $table->asta_win; $user_chooser = &$bri->user[$table->player[$chooser]]; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; $user_cur->subst = 'game'; $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1); - + if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) { // $ret .= "var de_che= 33;"; $ret .= playsound("ringbell.mp3"); } $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig); - + /* bg of caller cell */ $ret .= briscola_show($bri, $table, $user_cur); - + /* first gamer */ if ($i == ($table->gstart % BIN5_PLAYERS_N)) $ret .= "is_my_time = true; remark_on();"; else $ret .= "is_my_time = false; remark_off();"; - + $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); + $user_cur->step_inc(); } /* TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE VAR PER PASSARE ALLA FASE DI GIOCO */ - + } } } } else if ($user->subst == 'game') { log_wr("state: table::game".$argz[0]); - + if ($argz[0] == 'play') { $a_play = $argz[1]; $a_x = $argz[2]; $a_y = $argz[3]; - + if (strpos($a_x, "px") != FALSE) $a_x = substr($a_x,0,-2); if (strpos($a_y, "px") != FALSE) $a_y = substr($a_y,0,-2); - + $loggo = sprintf("A_play %s, table_pos %d == %d, mazzo %d, gstart %d, card_stat %d, card_own %d", $a_play, $user->table_pos, ($table->gstart % BIN5_PLAYERS_N), $table->mazzo, $table->gstart, $table->card[$a_play]->stat, $table->card[$a_play]->owner); log_wr("CIC".$loggo); - + /* se era il suo turno e la carta era sua ed era in mano */ - if ($a_play >=0 && $a_play < (BIN5_PLAYERS_N == 5 ? 40 : 24) && + if ($a_play >=0 && $a_play < (BIN5_CARD_HAND * BIN5_PLAYERS_N) && ($user->table_pos == (($table->gstart + $table->turn) % BIN5_PLAYERS_N)) && $table->card[$a_play]->stat == 'hand' && $table->card[$a_play]->owner == $user->table_pos) { log_wr(sprintf("User: %s Play: %d",$user->name, $a_play)); - + /* Change the card status. */ $table->card[$a_play]->play($a_x, $a_y); - + /* * !!!! TURN INCREMENTED BEFORE !!!! */ $turn_cur = ($table->gstart + $table->turn) % BIN5_PLAYERS_N; $table->turn++; - + $card_play = sprintf("card_play(%d,%d,%d,%d);|", $user->table_pos, $a_play, $a_x, $a_y); if (($table->turn % BIN5_PLAYERS_N) != 0) { /* manche not finished */ $turn_nex = ($table->gstart + $table->turn) % BIN5_PLAYERS_N; - + $player_cur = "remark_off();"; $player_nex = $card_play . "is_my_time = true; remark_on();"; $player_oth = $card_play; } - else if ($table->turn <= (BIN5_PLAYERS_N * 8)) { /* manche finished */ + else if ($table->turn <= (BIN5_PLAYERS_N * BIN5_CARD_HAND)) { /* manche finished */ $winner = calculate_winner($table); log_wr("GSTART 3"); $table->gstart = $winner; $turn_nex = ($table->gstart + $table->turn) % BIN5_PLAYERS_N; - + log_wr(sprintf("The winner is: [%d] [%s]", $winner, $bri->user[$table->player[$winner]]->name)); $card_take = sprintf("sleep(gst,2000);|cards_take(%d);|", $winner); - $player_cur = "remark_off();" . $card_take; + $player_cur = "remark_off();" . $card_take; if ($turn_cur != $turn_nex) $player_nex = $card_play . $card_take; else $player_nex = ""; - if ($table->turn < (BIN5_PLAYERS_N * 8)) /* game NOT finished */ + if ($table->turn < (BIN5_PLAYERS_N * BIN5_CARD_HAND)) /* game NOT finished */ $player_nex .= "is_my_time = true; remark_on();"; $player_oth = $card_play . $card_take; } - + log_wr(sprintf("Turn Cur %d Turn Nex %d",$turn_cur, $turn_nex)); - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; - + $ret = sprintf('gst.st = %d; ', $user_cur->step+1); - - + + if ($i == $turn_cur) { - $ret .= $player_cur; + $ret .= $player_cur; } if ($i == $turn_nex) { - $ret .= $player_nex; + $ret .= $player_nex; } if ($i != $turn_cur && $i != $turn_nex) { $ret .= $player_oth; } - + $retar[$i] = $ret; } - - if ($table->turn == (BIN5_PLAYERS_N * 8)) { /* game finished */ + + if ($table->turn == (BIN5_PLAYERS_N * BIN5_CARD_HAND)) { /* game finished */ log_wr(sprintf("GIOCO FINITO !!!")); - - - /* ************************************************ */ - /* PRIMA LA PARTE PER LO SHOW DI CHI HA VINTO */ - /* ************************************************ */ - $pt_cur = calculate_points(&$table); - - $plist = "$table->table_token|$user->table_orig|$table->player_n"; - $ucodes = array(); - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bri->user[$table->player[$i]]; - $plist .= '|'.xcapelt($user_cur->name).'|'.$pt_cur[$i]; - $ucodes[$i] = $user_cur->code_get(); - } - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $plist .= '|'.xcapelt($ucodes[$i]); - } - log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); - if ($user->table_orig < TABLES_AUTH_N) { - require_once("../Obj/dbase_".$G_dbasetype.".phh"); - - if (($bdb = BriskDB::create()) != FALSE) { - $bdb->bin5_points_save($curtime, $table->table_token, $user->table_orig, $ucodes, $pt_cur); - unset($bdb); - } - else { - log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); + + if ($table->rules_engine(&$bri, $curtime, BIN5_RULES_FINISH, $user)) { + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$table->player[$i]]; + $retar[$i] .= show_table(&$bri,&$user_cur,$user_cur->step+1,TRUE, TRUE); } - log_points($curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); - } - - $table->game_next(); - $table->game_init(&$bri->user); - - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bri->user[$table->player[$i]]; - $retar[$i] .= show_table(&$bri,&$user_cur,$user_cur->step+1,TRUE, TRUE); } } - - - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; - + $user_cur->comm[$user_cur->step % COMM_N] = $retar[$i]; - $user_cur->step_inc(); + $user_cur->step_inc(); } - + log_wr(sprintf("TURN: %d",$table->turn)); /* Have played all the players ? */ /* NO: switch the focus and enable the next player to play. */ - + /* YES: calculate who win and go to the next turn. */ } } diff --git a/web/briskin5/stat-day.php b/web/briskin5/stat-day.php index 7218905..72408e4 100644 --- a/web/briskin5/stat-day.php +++ b/web/briskin5/stat-day.php @@ -1,9 +1,9 @@ array( 'it' => 'Partite normali', + 'en' => 'Normal matches' ), + 'special match' => array( 'it' => 'Partite speciali', + 'en' => 'Special matches'), + + 'info_total'=> array( 'it' => 'totali', + 'en' => 'En totali') + ); + + ini_set("max_execution_time", "240"); require_once("../Obj/brisk.phh"); @@ -41,17 +61,17 @@ require_once("Obj/placing.phh"); function main_file($curtime) { - GLOBAL $G_alarm_passwd; + GLOBAL $G_lang, $G_alarm_passwd; $tri = array(); $mon = array(); $wee = array(); - + if (($fp = @fopen(LEGAL_PATH."/points.log", 'r')) == FALSE) { echo "Open data file error"; exit; } echo "prima
"; - + if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'r')) != FALSE) { $skip = intval(fgets($fp_start)); if ($skip > 0) @@ -63,7 +83,7 @@ function main_file($curtime) echo "database connection failed"; exit; } - + $bdb->users_load(); for ($i = 0 ; $i < $bdb->count() ; $i++) { @@ -82,7 +102,7 @@ function main_file($curtime) // if not auth table, continue if (count($ar) < 15) continue; - + // echo $p++."
"; if ($ar[7] >= TABLES_AUTH_N) continue; @@ -98,11 +118,11 @@ function main_file($curtime) fwrite($fp_start, sprintf("%d\n", $curpos)); fclose($fp_start); } - + continue; } // echo $p++." ".BIN5_PLAYERS_N."
"; - + $found = FALSE; $mult = 1; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { @@ -125,22 +145,22 @@ function main_file($curtime) echo "WARNING: the user [".$username."] NOT EXISTS!
"; continue; } - + // echo $item->login." id)".$id." ".$ar[10+($i*2)]." mult: ".$mult."
"; $tri[$id]->add($ar[10+($i*2)] / $mult); - if ($ar[0] >= $curtime - MON_LIMIT) + if ($ar[0] >= $curtime - MON_LIMIT) $mon[$id]->add($ar[10+($i*2)] / $mult); - if ($ar[0] >= $curtime - WEE_LIMIT) + if ($ar[0] >= $curtime - WEE_LIMIT) $wee[$id]->add($ar[10+($i*2)] / $mult); } // $p++; echo $p++."
"; } fclose($fp); - + usort($tri, ptsgam_cmp); usort($mon, ptsgam_cmp); usort($wee, ptsgam_cmp); - + echo "

TRI
\n"; if (($fplo = @fopen(LEGAL_PATH."/class_tri_lo.log", 'w')) == FALSE) { @@ -156,9 +176,9 @@ function main_file($curtime) if ($tri[$i]->gam == 0.0) continue; printf("%s: %s (%d)
\n", $tri[$i]->username, $tri[$i]->snormpts(), $tri[$i]->gam); - if ($tri[$i]->gam >= TRI_MAX_GAMES) + if ($tri[$i]->gam >= TRI_MAX_GAMES) fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam)); - else if ($tri[$i]->gam > TRI_MIN_GAMES) + else if ($tri[$i]->gam > TRI_MIN_GAMES) fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam)); } fclose($fphi); @@ -179,9 +199,9 @@ function main_file($curtime) if ($mon[$i]->gam == 0.0) continue; printf("%s: %s (%d)
\n", $mon[$i]->username, $mon[$i]->snormpts(), $mon[$i]->gam); - if ($mon[$i]->gam >= MON_MAX_GAMES) + if ($mon[$i]->gam >= MON_MAX_GAMES) fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam)); - else if ($mon[$i]->gam > MON_MIN_GAMES) + else if ($mon[$i]->gam > MON_MIN_GAMES) fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam)); } fclose($fphi); @@ -198,12 +218,12 @@ function main_file($curtime) } for ($i = 0 ; $i < count($wee) ; $i++) { - if ($wee[$i]->gam == 0.0) + if ($wee[$i]->gam == 0.0) continue; printf("%s: %s (%d)
\n", $wee[$i]->username, $wee[$i]->snormpts(), $wee[$i]->gam); - if ($wee[$i]->gam >= WEE_MAX_GAMES) + if ($wee[$i]->gam >= WEE_MAX_GAMES) fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam)); - else if ($wee[$i]->gam > WEE_MIN_GAMES) + else if ($wee[$i]->gam > WEE_MIN_GAMES) fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam)); } fclose($fphi); @@ -213,60 +233,96 @@ function main_file($curtime) function main_pgsql($from, $to) { - GLOBAL $G_dbpfx; + GLOBAL $G_lang, $G_dbpfx, $mlang_stat_day; - if (($fpexp = @fopen(LEGAL_PATH."/explain.log", 'w')) == FALSE) { - echo "Open explain failed
"; - exit; - } - fprintf($fpexp, "

Minuta delle partite dal (%s) al (%s)

", - $from, $to); + $ret = FALSE; + $fpexp = FALSE; - if (($bdb = BriskDB::create()) == FALSE) { - echo "database connection failed"; - exit; - } do { + if (($fpexp = @fopen(LEGAL_PATH."/explain.log", 'w')) == FALSE) { + log_crit("stat-day: open explain failed"); + break; + } + fprintf($fpexp, "

Minuta delle partite dal (%s) al (%s)

", + $from, $to); + + if (($bdb = BriskDB::create()) == FALSE) { + log_crit("stat-day: database connection failed"); + break; + } + if (pg_query($bdb->dbconn->db(), "BEGIN") == FALSE) { - log_crit("statadm: begin failed"); + log_crit("stat-day: begin failed"); break; } - - $tmt_sql = sprintf("select m.code as code from %sbin5_matches as m, %sbin5_games as g WHERE m.code = g.mcode AND g.tstamp >= '%s' AND g.tstamp < '%s' GROUP BY m.code;", $G_dbpfx, $G_dbpfx, $from, $to); - // if deletable old matches exists then ... - if (($tmt_pg = pg_query($bdb->dbconn->db(), $tmt_sql)) != FALSE) { + // retrieve list of active tournaments + $trn_sql = sprintf("SELECT * FROM %sbin5_tournaments WHERE active = 1;", $G_dbpfx); + if (($trn_pg = pg_query($bdb->dbconn->db(), $trn_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + + $trn_n = pg_numrows($trn_pg); + printf("Number of tournaments: %d\n", $trn_n); + + for ($t = 0 ; $t < $trn_n ; $t++) { + $trn_obj = pg_fetch_object($trn_pg, $t); + + $tmt_sql = sprintf("SELECT m.code AS code, m.mazzo_next as minus_one_is_old FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_tournaments as t WHERE t.code = m.tcode AND m.code = g.mcode AND t.code = %d AND g.tstamp >= '%s' AND g.tstamp < '%s' GROUP BY m.code, minus_one_is_old ORDER BY m.code, minus_one_is_old DESC;", + $G_dbpfx, $G_dbpfx, $G_dbpfx, $trn_obj->code, $from, $to); + + // if deletable old matches exists then ... + if (($tmt_pg = pg_query($bdb->dbconn->db(), $tmt_sql)) == FALSE) { + log_crit("stat-day: select from matches failed"); + break; + } + // // store matches before clean them // $tmt_n = pg_numrows($tmt_pg); // get matches + if ($tmt_n == 0) + continue; + + if (!isset($mlang_stat_day[$trn_obj->name][$G_lang])) { + log_crit("stat-day: tournament name not found in array"); + break; + } + printf("[Tournament [%s]], number of matches: %d\n", $mlang_stat_day[$trn_obj->name][$G_lang], $tmt_n); + fprintf($fpexp, "

%s

", $mlang_stat_day[$trn_obj->name][$G_lang]); + for ($m = 0 ; $m < $tmt_n ; $m++) { fprintf($fpexp, "
"); $tmt_obj = pg_fetch_object($tmt_pg, $m); - - $usr_sql = sprintf(" -SELECT u.code AS code, u.login AS login, min(g.tstamp) AS first, max(g.tstamp) AS last, m.tidx AS tidx FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d GROUP BY u.code, u.login, m.tidx;", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $tmt_obj->code); - - if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE ) { + + if (($users = $bdb->users_get($tmt_obj->code, TRUE, ($tmt_obj->minus_one_is_old > -1))) == FALSE) { + log_crit("%s: users_get failed", __FUNCTION__); break; } - $usr_n = pg_numrows($usr_pg); - if ($usr_n != 5) { + + $gam_sql = sprintf("SELECT g.* FROM %sbin5_tournaments as t, %sbin5_matches AS m, %sbin5_games AS g WHERE t.code = m.tcode AND m.code = g.mcode AND m.code = %d ORDER BY g.tstamp;", + $G_dbpfx, $G_dbpfx, $G_dbpfx, $tmt_obj->code); + if (($gam_pg = pg_query($bdb->dbconn->db(), $gam_sql)) == FALSE ) { + log_crit("stat-day: gam_sql failed"); break; - } - for ($u = 0 ; $u < $usr_n ; $u++) { - $usr_obj = pg_fetch_object($usr_pg, $u); + } + + for ($u = 0 ; $u < count($users) ; $u++) { if ($u == 0) { - fprintf($fpexp, "

Codice: %d (%s - %s), Tavolo: %s

\n", $tmt_obj->code, $usr_obj->first, $usr_obj->last, $usr_obj->tidx); + fprintf($fpexp, "

Codice: %d (%s - %s), Tavolo: %s

\n", $tmt_obj->code, $users[$u]['first'], $users[$u]['last'], $users[$u]['tidx']); fprintf($fpexp, "\n"); - } - fprintf($fpexp, "", $usr_obj->login); - $pts_sql = sprintf(" -select p.pts as pts from %sbin5_matches as m, %sbin5_games as g, %sbin5_points as p, %susers as u WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d AND u.code = %d ORDER BY g.code", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, - $tmt_obj->code, $usr_obj->code); + } + fprintf($fpexp, "", $users[$u]['login']); + // note: we are looping on users, order on them not needed + $pts_sql = sprintf("SELECT p.pts as pts from %sbin5_games as g, %sbin5_points as p WHERE g.code = p.gcode AND g.mcode = %d AND p.ucode = %d ORDER BY g.code", + $G_dbpfx, $G_dbpfx, $G_dbpfx, + $tmt_obj->code, $users[$u]['code']); - if (($pts_pg[$u] = pg_query($bdb->dbconn->db(), $pts_sql)) == FALSE) { + // points of the match for each user + if (($pts_pg[$u] = pg_query($bdb->dbconn->db(), $pts_sql)) == FALSE) { + log_crit("stat-day: pts_sql failed"); break; } if ($u == 0) { @@ -274,74 +330,95 @@ select p.pts as pts from %sbin5_matches as m, %sbin5_games as g, %sbin5_points a } else { if ($num_games != pg_numrows($pts_pg[$u])) { + log_crit("stat-day: num_games != pg_numrows"); break; } } } - if ($u != 5) { + if ($u != BIN5_PLAYERS_N) { + log_crit("stat-day: u != BIN5_PLAYERS_N"); break; - } - fprintf($fpexp, "\n"); + } + if ($tmt_obj->minus_one_is_old != -1) { + fprintf($fpexp, "\n"); + } // LISTA DELLE VARIE PARTITE for ($g = 0 ; $g < $num_games ; $g++) { + $gam_obj = pg_fetch_object($gam_pg, $g); fprintf($fpexp, ""); - for ($u = 0 ; $u < 5 ; $u++) { + for ($u = 0 ; $u < BIN5_PLAYERS_N ; $u++) { $pts_obj = pg_fetch_object($pts_pg[$u], $g); - fprintf($fpexp, "", $pts_obj->pts); + fprintf($fpexp, "<%s>%d", + ($tmt_obj->minus_one_is_old == -1 ? "td" : "th"), + $pts_obj->pts, + ($tmt_obj->minus_one_is_old == -1 ? "td" : "th")); + } + if ($tmt_obj->minus_one_is_old != -1) { + fprintf($fpexp, "", $users[$gam_obj->mazzo]['login'], + xcape( game_description($gam_obj->act, 'plain', $gam_obj->mult, + $gam_obj->asta_win, $users[$gam_obj->asta_win]['login'], + $gam_obj->friend, $users[$gam_obj->friend]['login'], + $gam_obj->pnt, $gam_obj->asta_pnt) ) + ); } fprintf($fpexp, "\n"); } // LISTA DEI TOTALI fprintf($fpexp, ""); - for ($u = 0 ; $u < 5 ; $u++) { - $usr_obj = pg_fetch_object($usr_pg, $u); + for ($u = 0 ; $u < BIN5_PLAYERS_N ; $u++) { $tot_sql = sprintf(" SELECT SUM(p.pts) AS pts FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d AND u.code = %d", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, - $tmt_obj->code, $usr_obj->code); + $tmt_obj->code, $users[$u]['code']); if (($tot_pg = pg_query($bdb->dbconn->db(), $tot_sql)) == FALSE ) { break; } $tot_obj = pg_fetch_object($tot_pg, 0); fprintf($fpexp, "", $tot_obj->pts); } - fprintf($fpexp, "\n"); + if ($tmt_obj->minus_one_is_old != -1) { + fprintf($fpexp, "\n", $mlang_stat_day['info_total'][$G_lang]); + } fprintf($fpexp, "
%s%s
mazzodescrizione
%d%s%s
%d
%s
\n"); } if ($m < $tmt_n) break; - } // if (($tmt_pg = pg_query($bdb->dbco... - - fclose($fpexp); - return (TRUE); + } + if ($t < $trn_n) + break; + $ret = (TRUE); } while (0); - pg_query($bdb->dbconn->db(), "ROLLBACK"); - fclose($fpexp); + if ($ret == FALSE) { + pg_query($bdb->dbconn->db(), "ROLLBACK"); + } + if ($fpexp != FALSE) { + fclose($fpexp); + } - return (FALSE); + return ($ret); } // echo "QUIr\n"; // exit(123); function main() { - GLOBAL $G_dbasetype, $G_alarm_passwd, $pazz, $from, $to; - + GLOBAL $G_lang, $G_dbasetype, $G_alarm_passwd, $pazz, $from, $to; + if ($pazz != $G_alarm_passwd) { echo "Wrong password
"; mop_flush(); exit; } - + $fun_name = "main_${G_dbasetype}"; - + if ($ret = $fun_name($from, $to)) echo "Success.
\n"; else echo "Failed.
\n"; - + echo "Fine.\n"; mop_flush(); } diff --git a/web/briskin5/statadm.php b/web/briskin5/statadm.php index db3cf9b..f6d40b3 100644 --- a/web/briskin5/statadm.php +++ b/web/briskin5/statadm.php @@ -30,6 +30,8 @@ $G_base = "../"; +define('BIN5_TOURNAMENT_NORMAL', 1); + ini_set("max_execution_time", "240"); require_once("../Obj/brisk.phh"); @@ -232,8 +234,8 @@ function main_pgsql($curtime) $mtc_sql = sprintf("CREATE TEMPORARY TABLE %sbin5_temp_matches ON COMMIT DROP AS SELECT m.code, max(g.tstamp) AS tstamp FROM %sbin5_matches as m, %sbin5_games as g - WHERE g.mcode = m.code GROUP BY m.code, m.ttok", - $G_dbpfx, $G_dbpfx, $G_dbpfx); + WHERE m.tcode = %d AND m.code = g.mcode GROUP BY m.code, m.ttok", + $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL); if (pg_query($bdb->dbconn->db(), $mtc_sql) == FALSE) { log_crit("statadm: temporary matches table creation [$mtc_sql] failed"); break; @@ -336,12 +338,14 @@ function main_pgsql($curtime) $pla_sql = sprintf("SELECT (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) as score, sum(p.pts) as points, count(p.pts) as games, u.code as ucode, u.login as login FROM %sbin5_points as p, %sbin5_games as g, %sbin5_matches as m, %susers as u - WHERE p.ucode = u.code AND p.gcode = g.code AND g.mcode = m.code AND - g.tstamp > to_timestamp(%d) AND g.tstamp <= to_timestamp(%d) + WHERE m.tcode = %d AND m.code = g.mcode AND + g.tstamp > to_timestamp(%d) AND g.tstamp <= to_timestamp(%d) AND + p.ucode = u.code AND p.gcode = g.code GROUP BY u.code, u.login ORDER BY (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) DESC, count(p.pts) DESC", - $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $curtime - $limi[$dtime], $curtime); + $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL, + $curtime - $limi[$dtime], $curtime); // log_crit("statadm: INFO: [$pla_sql]"); diff --git a/web/commons.js b/web/commons.js index 3021613..192094d 100644 --- a/web/commons.js +++ b/web/commons.js @@ -25,7 +25,7 @@ var PLAYERS_N = 3; var EXIT_BAN_TIME = 3600; var cookiepath = "/brisk/"; -var mlang_commons = { 'imgload_a' : { 'it' : 'Immagine caricate ', +var mlang_commons = { 'imgload_a' : { 'it' : 'Immagini caricate ', 'en' : 'Loaded images ' }, 'imgload_b' : { 'it' : '%.', 'en' : '%.' }, diff --git a/web/index.php b/web/index.php index cf1abd8..c11a22d 100644 --- a/web/index.php +++ b/web/index.php @@ -185,6 +185,10 @@ $mlang_room = array( 'userpasserr' => array('it' => 'Utente e/o password errati 'en' => 'user\'s placings'), 'itm_cla' => array('it' => 'classifiche', 'en' => 'placings'), + 'tit_mnu' => array('it' => 'minuta giornaliera', + 'en' => 'daily report'), + 'itm_mnu' => array('it' => 'minuta', + 'en' => 'daily deport'), 'tit_rmap' => array('it' => 'prossime funzionalità implementate', 'en' => 'roadmap of next functionalities'), 'itm_rmap' => array('it' => 'roadmap', @@ -612,6 +616,10 @@ google_color_url = "000000"; onmouseover="menu_hide(0,1);" title="'.$mlang_room['tit_cla'][$G_lang].'" onclick="act_placing();">'.$mlang_room['itm_cla'][$G_lang].'
+'.$mlang_room['itm_mnu'][$G_lang].'
+ '.$mlang_room['itm_rmap'][$G_lang].'
diff --git a/web/index_wr.php b/web/index_wr.php index 91eb8f3..a9d8906 100644 --- a/web/index_wr.php +++ b/web/index_wr.php @@ -667,10 +667,7 @@ function index_wr_main(&$room, $remote_addr_full, $get, $post, $cookie) $bri_user_cur = $bri->user[$i]; $user_cur = $room->user[$table->player[$i]]; - $bri_user_cur->stat_set('table'); - $bri_user_cur->subst = 'asta'; $bri_user_cur->laccwr = $curtime; - $bri_user_cur->trans_step = $user_cur->step + 1; $bri_user_cur->comm[$bri_user_cur->step % COMM_N] = ""; $bri_user_cur->step_inc(); @@ -685,11 +682,8 @@ function index_wr_main(&$room, $remote_addr_full, $get, $post, $cookie) // // CHECK while (array_pop($user_cur->comm) != NULL); - $ret = ""; - $ret .= sprintf('gst.st_loc++; gst.st=%d; createCookie("table_idx", %d, 24*365, cookiepath); createCookie("table_token", "%s", 24*365, cookiepath); createCookie("lang", "%s", 24*365, cookiepath); xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("briskin5/index.php");|', $user_cur->step+1, $table_idx, $table_token, $G_lang); - - $user_cur->comm[$user_cur->step % COMM_N] = $ret; $user_cur->trans_step = $user_cur->step + 1; + $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; createCookie("table_idx", %d, 24*365, cookiepath); createCookie("table_token", "%s", 24*365, cookiepath); createCookie("lang", "%s", 24*365, cookiepath); xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("briskin5/index.php");|', $user_cur->step+1, $table_idx, $table_token, $G_lang); log_wr("TRANS ATTIVATO"); $user_cur->stat_set('table'); diff --git a/web/xynt-streaming.js b/web/xynt-streaming.js index 507490f..7292340 100644 --- a/web/xynt-streaming.js +++ b/web/xynt-streaming.js @@ -869,6 +869,7 @@ xynt_streaming.prototype = { //xx this.hbit("+"); // alert("SINGLE: ["+singlecomm+"]"); + // window.console.log("["+singlecomm+"]"); this.cmdproc(singlecomm); again = 1; } diff --git a/web/xynt_test01.php b/web/xynt_test01.php index 7cafda6..01adb53 100644 --- a/web/xynt_test01.php +++ b/web/xynt_test01.php @@ -5,7 +5,8 @@ $desc = array( "Semplice: da 1 a 9 ogni secondo, poi ricomincia (status sempre v "Restart: da 1 a 8 ogni secondo, pausa 16 secondi (status passa ad arancione e poi a rosso), poi ricomincia (e status torna a verde).", "Pausa: da 1 a 5 ogni secondo, pausa 3 secondi, e poi 8 e 9 ogni secondo, e poi ricomincia (status sempre verde).", "Keyword: da 1 a 5 ogni secondo, @BEGIN@, @END@, @BEGIN@ xxx yyy @END@, 9, (status sempre verde).", - "Reload limiter: da 1 a 8 ogni secondo e chiude, 9 setta e chiude subito,
il client aspetta 3 secondi, e poi da 10 a N ogni secondo, (status sempre verde)."); + "Reload limiter: da 1 a 8 ogni secondo e chiude, 9 setta e chiude subito,
il client aspetta 3 secondi, e poi da 10 a N ogni secondo, (status sempre verde).", + "Esegue un comando, manda loc_new a un valore irraggiungibile, stoppa il processore di comandi e poi dà un comando teoricamente irraggiungibile."); // trim(mb_convert_case($split[0], MB_CASE_TITLE, 'UTF-8')) @@ -252,6 +253,17 @@ if (isset($isstream) && $isstream == "true") { sleep(1); } } + break; + case 7: + $chunk = $trobj->chunk(1, sprintf("gst.st++; \$('container').innerHTML = 'prima';")); + print($chunk); + + $chunk = $trobj->chunk(2, sprintf("gst.st++; gst.st_loc_new++; xstm.stop();")); + print($chunk); + + $chunk = $trobj->chunk(3, sprintf("gst.st++; \$('container').innerHTML = 'dopo';")); + print($chunk); + break; }