X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=000722b685c053b8c6de2d668139aa6eaba5f883;hb=27185d840648e6857ab197900e3cb11baf5a3692;hp=231788eb94e7d734bc038af9a684161836b35ce1;hpb=a2a406de4a111adf29548608cd5386c1138043ea;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 231788e..000722b 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -286,7 +286,9 @@ Copyright 2006-2009 Matteo Nasta function mop_flush() { - ob_flush(); + for ($i = 0; $i < ob_get_level(); $i++) + ob_end_flush(); + ob_implicit_flush(1); flush(); } @@ -657,491 +659,6 @@ class Table { } // end class Table -// User flags -define('USER_FLAG_AUTH', 0x02); - -define('USER_FLAG_MAP_AUTH', 0x0c); -define('USER_FLAG_LISTAUTH', 0x04); -define('USER_FLAG_ISOLAUTH', 0x08); - -define('USER_FLAG_DBFAILED', 0x10); - -// user status -define('USER_FLAG_S_NORM', 0x000); // done -define('USER_FLAG_S_PAU', 0x100); // done -define('USER_FLAG_S_OUT', 0x200); // done -define('USER_FLAG_S_DOG', 0x300); // done -define('USER_FLAG_S_EAT', 0x400); // done -define('USER_FLAG_S_WRK', 0x500); // done -define('USER_FLAG_S_SMK', 0x600); // done -define('USER_FLAG_S_EYE', 0x700); // done -define('USER_FLAG_S_RABB', 0x800); // done -define('USER_FLAG_S_SOCC', 0x900); // done -define('USER_FLAG_S_BABY', 0xa00); // done -define('USER_FLAG_S_MOP', 0xb00); // done - -define('USER_FLAG_S_ALL', 0xf00); // done - -/* type of user normal, supporter etc ... */ -define('USER_FLAG_TY_ALL', 0xff0000); // done -define('USER_FLAG_TY_NORM', 0x010000); // done -define('USER_FLAG_TY_SUPER', 0x020000); // done -// ... other usefull status ... -define('USER_FLAG_TY_SUSPEND', 0x400000); // done -define('USER_FLAG_TY_DISABLE', 0x800000); // done - -class User { - 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 $code; // authentication code - var $name; // name of the user - var $sess; // session of the user - var $ip; // ip of the user - var $lacc; // last access (for the cleanup) - var $laccwr; // last access (for the cleanup) - var $bantime; // timeout to temporary ban - var $stat; // status (outdoor, room, table, game, ...) - var $subst; // substatus for each status - var $step; // step of the current status - var $trans_step; // step to enable transition between pages (disable == -1) - - var $rd_socket; // socket handle of push stream - var $rd_endtime; // end time for push stream - var $rd_stat; // actual status of push stream - var $rd_subst; // actual substatus of push stream - var $rd_step; // actual step of push stream - var $rd_from; // referer - var $rd_scristp; // current script step (for each session) - var $comm; // commands array - // 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 ? - - // FIXME: the table_orig field must be removed after table field verify of index management (in spawned table - // it is allways ZERO - var $table; // id of the current table when you are in game - var $table_orig; // id of the current table when you aren't in game - var $table_pos; // idx on the table - var $table_token;// token that identify a game on a table - var $flags; // Bitfield with: AUTHENTICATE: 0x02 - var $the_end; // Flag to change the end of the session - - var $chat_lst; // Last chat line - var $chattime; // Array of chat times - var $chat_cur; // Current chat line number - var $chat_ban; // Time for ban chat - var $chat_dlt; // Delta t for ban - var $shm_sz; - - function User() { - } - - function create($idx, $name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") { - if (($thiz = new User()) == FALSE) - return (FALSE); - - $thiz->idx = $idx; - $thiz->idx_orig = $idx; - $thiz->code = -1; - $thiz->name = $name; - $thiz->sess = $sess; - $thiz->ip = $ip; - $thiz->lacc = time(); - $thiz->laccwr = time(); - $thiz->bantime = 0; - $thiz->stat = $stat; - $thiz->subst = $subst; - $thiz->step = 1; - $thiz->trans_step = -1; - $thiz->comm = array(); - - $thiz->rd_socket = NULL; - $thiz->rd_endtime = -1; - $thiz->rd_stat = -1; - $thiz->rd_subst = ""; - $thiz->rd_step = -1; - $thiz->rd_from = ""; - $thiz->rd_scristp = -1; - - $thiz->asta_card = -2; - $thiz->asta_pnt = -1; - $thiz->handpt = -1; - $thiz->exitislock = TRUE; - - $thiz->flags = 0x00; - - $thiz->chattime = array_fill(0, CHAT_N, 0); - $thiz->chat_cur = 0; - $thiz->chat_lst = ""; - $thiz->chat_ban = 0; - $thiz->chat_dlt = 0; - - $thiz->table_orig = $table; - $thiz->table = $table; - $thiz->table_pos = -1; - $thiz->table_token= ""; - $thiz->shm_sz = SHM_DIMS_U_MIN; - return ($thiz); - } - - function copy($from) - { - $this->idx = $from->idx; - $this->idx_orig = $from->idx; - $this->code = $from->code; - $this->name = $from->name; - $this->sess = $from->sess; - $this->ip = $from->ip; - $this->lacc = $from->lacc; - $this->laccwr = $from->laccwr; - $this->bantime = $from->bantime; - $this->stat = $from->stat; - $this->subst = $from->subst; - $this->step = $from->step; - $this->trans_step = $from->trans_step; - $this->comm = array(); - - $i_start = (1 > ($from->step - COMM_N) ? 1 : ($from->step - COMM_N)); - for ($i = $i_start ; $i < $from->step ; $i++) { - $ii = $i % COMM_N; - if (isset($from->comm[$ii])) { - $this->comm[$ii] = $from->comm[$ii]; - } - } - $this->asta_card = $from->asta_card; - $this->asta_pnt = $from->asta_pnt; - $this->handpt = $from->handpt; - $this->exitislock = $from->exitislock; - - $this->flags = $from->flags; - - $this->chattime = array(); - for ($i = 0 ; $i < CHAT_N ; $i++) - $this->chattime[$i] = $from->chattime[$i]; - $this->chat_cur = $from->chat_cur; - $this->chat_lst = $from->chat_lst; - $this->chat_ban = $from->chat_ban; - $this->chat_dlt = $from->chat_dlt; - - $this->table_orig = $from->table_orig; - $this->table = $from->table; - $this->table_pos = $from->table_pos; - $this->table_token = $from->table_token; - $this->the_end = $from->the_end; - $this->shm_sz = $from->shm_sz; - return (TRUE); - } - - - function myclone($from) - { - if (($thiz = new User()) == FALSE) - return (FALSE); - - $thiz->copy($from); - - return ($thiz); - } - - function spawn($from, $table, $table_pos) - { - if (($thiz = new User()) == FALSE) - return (FALSE); - - $thiz->idx = $from->idx; - $thiz->idx_orig = $from->idx; - $thiz->code = $from->code; - $thiz->name = $from->name; - $thiz->sess = $from->sess; - $thiz->ip = $from->ip; - $thiz->lacc = $from->lacc; - $thiz->laccwr = $from->laccwr; - $thiz->bantime = $from->bantime; - $thiz->stat = $from->stat; - $thiz->subst = $from->subst; - $thiz->step = $from->step; - $thiz->trans_step = $from->trans_step; - $thiz->comm = array(); - - /* - $i_start = (1 > ($from->step - COMM_N) ? 1 : ($from->step - COMM_N)); - for ($i = $i_start ; $i < $from->step ; $i++) { - log_wr("TRY PUSH:".$i); - $ii = $i % COMM_N; - $thiz->comm[$ii] = $from->comm[$ii]; - } - */ - $thiz->asta_card = $from->asta_card; - $thiz->asta_pnt = $from->asta_pnt; - $thiz->handpt = $from->handpt; - $thiz->exitislock = $from->exitislock; - $thiz->the_end = $from->the_end; - - $thiz->flags = $from->flags; - - $thiz->chattime = array_fill(0, CHAT_N, 0); - $thiz->chat_cur = 0; - $thiz->chat_lst = ""; - $thiz->chat_ban = 0; - $thiz->chat_dlt = 0; - - - $thiz->table_orig = $table; - $thiz->table = 0; - $thiz->table_pos = $table_pos; - $thiz->table_token = $from->table_token; - $thiz->shm_sz = $from->shm_sz; - - return ($thiz); - } - - function rd_socket_get() { - return ($this->rd_socket); - } - - function rd_socket_set($sock) { - $this->rd_socket = $sock; - } - - function idx_get() { - return ($this->idx); - } - - function code_get() { - return ($this->code); - } - - function stat_set($stat) { - log_main("sess: [".$this->sess. "] NEW STAT: [".$stat."]"); - $this->stat = "$stat"; - - /* - if (validate_sess($this->sess)) { - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH, 0775, TRUE); - $fp = @fopen(PROXY_PATH."/".$this->sess.".stat", 'w'); - fwrite($fp, sprintf("%s\n",$this->stat)); - fclose($fp); - } - */ - } - - 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; - } - - function rd_data_set($endtime, $stat, $subst, $step, $from) - { - $this->rd_endtime = $endtime; - $this->rd_stat = $stat; - $this->rd_subst = $subst; - $this->rd_step = $step; - $this->rd_from = $from; - $this->rd_scristp = 0; - } - - - function save_step() - { - do { - if (validate_sess($this->sess) == FALSE) - break; - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH, 0775, TRUE); - if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE) - break; - fwrite($fp, pack("LL",$this->step, $this->idx)); - fclose($fp); - - log_main("step_set [".$this->sess. "] [".$this->step."]"); - - return (TRUE); - } while (0); - - return (FALSE); - } - - static function load_step($sess) - { - $fp = FALSE; - do { - if (validate_sess($sess) == FALSE) - break; - - if (file_exists(PROXY_PATH) == FALSE) - mkdir(PROXY_PATH, 0775, TRUE); - if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) - break; - if (($s = fread($fp, 8)) == FALSE) - break; - if (mb_strlen($s, "ASCII") != 8) - 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); - } - - static function unproxy_step($sess) { - log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step"); - if (file_exists(PROXY_PATH) == FALSE) - return; - @unlink(PROXY_PATH."/".$sess.".step"); - } - - function reset() { - $curtime = time(); - log_legal($curtime, $this, "STAT:LOGOUT", ''); - - $tmp_sess = $this->sess; - $this->sess = ""; - self::unproxy_step($tmp_sess); - $this->name = ""; // OK here - while (array_pop($this->comm) != NULL); - $this->step = 0; - $this->chattime = array_fill(0, CHAT_N, 0); - $this->chat_cur = 0; - $this->chat_lst = ""; - $this->chat_ban = 0; - $this->chat_dlt = 0; - $this->the_end = FALSE; - } - - static function load_data($id, $sess) - { - log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] "); - - do { - if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { - log_main("ftok failed"); - break; - } - - if (($shm_sz = sharedmem_sz($tok)) == -1) { - log_main("shmop_open failed"); - } - - if ($shm_sz == -1) - $shm_sz = SHM_DIMS_U_MIN; - - if ($shm = shm_attach($tok, $shm_sz)) { - if (($user = @shm_get_var($shm, $tok)) == FALSE) { - break; - } - if ($sess != FALSE && $user->sess != $sess) { - break; - } - log_only("user == ".($user == FALSE ? "FALSE" : "TRUE")." user === ".($user === FALSE ? "FALSE" : "TRUE")." user isset ".(isset($user) ? "TRUE" : "FALSE")); - - if ($user == FALSE) { - log_only("INIT MAIN DATA"); - - // SHSPLIT FIXME: init_data for User class ?? - $user = User::create($id, "", ""); - if (@shm_put_var($shm, $tok, $user) == FALSE) { - log_only("PUT_VAR FALLITA ".strlen(serialize($user))); - log_only(serialize($user)); - } - log_shme("User::save_data2"); - } - else { - if ($sess != FALSE) { - /* - * NOTE: this part is for check only, theoretically - * user->step anch proxy_step are set allways at the same value - */ - $old_step = $user->step; - $arr = User::load_step($sess); - $user->step = $arr['s']; - if ($old_step != $user->step) { - log_crit("steps are diffetents User->step ".$user->step." Old_step: ".$old_step); - } - } - } - $user->shm_sz = $shm_sz; - - shm_detach($shm); - } - - // - // SHSPLIT: load users from the shared memory - // - return ($user); - } while (0); - - return (FALSE); - } - - - static function save_data($user, $id) - { - GLOBAL $sess; - - $shm = FALSE; - - if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) { - return (FALSE); - } - while ($user->shm_sz < SHM_DIMS_U_MAX) { - if (($shm = shm_attach($tok, $user->shm_sz)) == FALSE) - break; - - // log_only("PUT_VAR DI ".strlen(serialize($user))); - if (@shm_put_var($shm, $tok, $user) != FALSE) { - shm_detach($shm); - if ($user->sess != "") - $user->save_step(); - - log_shme("User::save_data"); - - log_main("User[".$id."] saved."); - return (TRUE); - } - if (shm_remove($shm) === FALSE) { - log_only("REMOVE FALLITA"); - break; - } - shm_detach($shm); - $user->shm_sz += SHM_DIMS_U_DLT; - } - - if ($shm) - shm_detach($shm); - - return (FALSE); - } - - function myname_innerHTML() - { - $class_id = ($this->flags & USER_FLAG_AUTH) + 1; - - return (sprintf('$("myname").innerHTML = "%s";', $class_id, - xcape($this->name,ENT_COMPAT,"UTF-8"))); - } - -} // end class User - class Room { @@ -1159,7 +676,7 @@ class Room { $this->table = array(); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $this->user[$i] = User::create($i, "", ""); + $this->user[$i] = User::create($this, $i, "", ""); } for ($i = 0 ; $i < TABLES_N ; $i++) { @@ -1258,7 +775,7 @@ class Room { $user_cur->bantime = $bri_user->bantime; } - log_legal($curtime, $user_cur, "STAT:DESTROY_GAME", $plist); + log_legal($curtime, 'xxx', $user_cur, "STAT:DESTROY_GAME", $plist); $this->room_join_wakeup($user_cur, FALSE, 0); $table_cur->table_token = ""; @@ -1297,7 +814,7 @@ class Room { for ($i = 0 ; $i < $table_cur->player_n ; $i++) { $plist .= '|'.$this->user[$table_cur->player[$i]]->sess; } - log_legal($curtime, $user_cur, "STAT:DESTROY_GAME(RECOVERY)", $plist); + log_legal($curtime, 'xxx', $user_cur, "STAT:DESTROY_GAME(RECOVERY)", $plist); $this->room_join_wakeup($user_cur, TRUE, -2); $table_cur->table_token = ""; @@ -1984,7 +1501,7 @@ class Room { $to_room = $to_user; } - log_legal($curtime, $user, + log_legal($curtime, 'xxx', $user, ($user->stat == 'room' ? 'room' : 'table '.$user->table),$msg); $user->chat_lst = "$msg"; @@ -2652,6 +2169,80 @@ class Room { return (FALSE); } + function request_mgr(&$s_a_p, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie) + { + printf("NEW_SOCKET (root): %d\n", intval($new_socket)); + + switch ($path) { + case SITE_PREFIX: + case SITE_PREFIX."index.php": + ob_start(); + index_main($this, $header_out, $addr, $get, $post, $cookie); + $content = ob_get_contents(); + ob_end_clean(); + + $s_a_p->pgflush_try_add($new_socket, 20, $header_out, $content); + return TRUE; + + break; + case SITE_PREFIX."index_wr.php": + ob_start(); + index_wr_main($this, $addr, $get, $post, $cookie); + $content = ob_get_contents(); + ob_end_clean(); + + $s_a_p->pgflush_try_add($new_socket, 20, $header_out, $content); + return TRUE; + + break; + case SITE_PREFIX."index_rd_ifra.php": + do { + if (!isset($cookie['sess']) + || (($user = $this->get_user($cookie['sess'], $idx)) == FALSE)) { + $content = User::stream_fini(TRUE); + + $s_a_p->pgflush_try_add($new_socket, 20, $header_out, $content); + return TRUE; + + break; + } + // close a previous opened index_read_ifra socket, if exists + if (($prev = $user->rd_socket_get()) != NULL) { + $s_a_p->socks_unset($user->rd_socket_get()); + fclose($user->rd_socket_get()); + printf("CLOSE AND OPEN AGAIN ON IFRA2\n"); + $user->rd_socket_set(NULL); + } + + $content = ""; + $user->stream_init($header_out, $content, $get, $post, $cookie); + + $response = headers_render($header_out, -1).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); + $user->rd_cache_set(mb_substr($content, $wret, $response_l - $wret, "ASCII")); + } + else { + $user->rd_cache_set(""); + } + fflush($new_socket); + + + $s_a_p->socks_set($new_socket, $user); + $user->rd_socket_set($new_socket); + printf(" - qui ci siamo - "); + return TRUE; + } while (FALSE); + + return FALSE; + break; + } + + return (FALSE); + } } // end class Room @@ -2975,7 +2566,7 @@ function log_auth($sess, $log) if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0) return; - if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) + if ((BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else $btrace = ""; @@ -3013,15 +2604,14 @@ function log_shme($log) // function log_legal($curtime, $sess, $name, $where, $mesg) -function log_legal($curtime, $user, $where, $mesg) +function log_legal($curtime, $addr, $user, $where, $mesg) { - GLOBAL $_SERVER; if (($fp = @fopen(LEGAL_PATH."/legal.log", 'a')) != FALSE) { /* Unix time | session | nickname | IP | where was | mesg */ fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess, ($user->flags & USER_FLAG_AUTH ? 'A' : 'N'), - $user->name, $_SERVER['REMOTE_ADDR'], $where , $mesg)); + $user->name, $addr, $where , $mesg)); fclose($fp); } } @@ -3140,7 +2730,7 @@ function sharedmem_sz($tok) $shm_sz = shmop_size($shm_id); shmop_close($shm_id); - log_main("shm_sz: ".$shm_sz." SHM_DIMS: ".SHM_DIMS); + // log_main("shm_sz: ".$shm_sz." SHM_DIMS: ".SHM_DIMS); return ($shm_sz); }