X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fuser.phh;h=2caf30a94f1f0cbe5fb55d8072bfaf3eac0162ef;hb=39cd2a5ca00a2984bd8970ddf630314c246d3fc0;hp=f3886038d8cbfde0de900959a7cdcea051c3d7a4;hpb=22b71dd0fd76bf5af565d56c3e82ea77b4b44bc5;p=brisk.git diff --git a/web/Obj/user.phh b/web/Obj/user.phh index f388603..2caf30a 100644 --- a/web/Obj/user.phh +++ b/web/Obj/user.phh @@ -59,6 +59,7 @@ define('USER_FLAG_TY_NORM', 0x010000); // done define('USER_FLAG_TY_SUPER', 0x020000); // done define('USER_FLAG_TY_CERT', 0x040000); // done // ... other usefull status ... +define('USER_FLAG_TY_FIRONLY', 0x200000); // done define('USER_FLAG_TY_SUSPEND', 0x400000); // done define('USER_FLAG_TY_DISABLE', 0x800000); // done @@ -107,6 +108,7 @@ class User { var $rd_cache; // place where store failed fwrite data var $rd_zls; // zlibstream object handle if compressed stream, else FALSE var $rd_transp; // class that define stream encapsulation type (iframe, xhr, ...) + var $rd_is_chunked; // is the transport chunked or not ? var $comm; // commands array // var $asta_card; // @@ -121,6 +123,7 @@ class User { 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 $rec; // field with user db record or FALSE var $the_end; // Flag to change the end of the session var $chat_lst; // Last chat line @@ -135,7 +138,7 @@ class User { function User() { } - function create(&$room, $idx, $name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") { + static function create(&$room, $idx, $name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") { if (($thiz = new User()) == FALSE) return (FALSE); @@ -166,6 +169,7 @@ class User { $thiz->rd_cache = ""; $thiz->rd_zls = FALSE; $thiz->rd_transp = NULL; + $thiz->rd_is_chunked = FALSE; $thiz->asta_card = -2; $thiz->asta_pnt = -1; @@ -173,7 +177,8 @@ class User { $thiz->exitislock = TRUE; $thiz->flags = 0x00; - + $thiz->rec = FALSE; + $thiz->chattime = array_fill(0, CHAT_N, 0); $thiz->chat_cur = 0; $thiz->chat_lst = ""; @@ -218,6 +223,7 @@ class User { $this->exitislock = $from->exitislock; $this->flags = $from->flags; + $this->rec = $from->rec; $this->chattime = array(); for ($i = 0 ; $i < CHAT_N ; $i++) @@ -237,7 +243,7 @@ class User { } - function myclone($from) + static function myclone($from) { if (($thiz = new User()) == FALSE) return (FALSE); @@ -247,7 +253,7 @@ class User { return ($thiz); } - function spawn($from, $table, $table_pos) + static function spawn($from, $table, $table_pos) { if (($thiz = new User()) == FALSE) return (FALSE); @@ -282,6 +288,7 @@ class User { $thiz->the_end = $from->the_end; $thiz->flags = $from->flags; + $thiz->rec = $from->rec; $thiz->chattime = array_fill(0, CHAT_N, 0); $thiz->chat_cur = 0; @@ -299,6 +306,21 @@ class User { return ($thiz); } + function flags_set($flags, $mask) + { + $flags_old = $this->flags & (~$mask); + $this->flags = ($flags_old | ($flags & $mask)); + } + + function store_set() + { + if (($bdb = BriskDB::create()) == FALSE) { + return FALSE; + } + return ($bdb->user_prefs_update($this->code, ($this->flags & (USER_FLAG_TY_ALL | USER_FLAG_MAP_AUTH)), + $this->rec->supp_comp)); + } + function rd_data_set($curtime, $transp, $enc, $stat, $subst, $step, $from) { $this->rd_endtime = $curtime + RD_ENDTIME_DELTA; @@ -310,6 +332,7 @@ class User { $this->rd_kalive = $curtime + RD_KEEPALIVE_TOUT; $this->rd_zls = ZLibStream::create($enc); $this->rd_transp = Transport::create($transp); + $this->rd_is_chunked = $this->rd_transp->is_chunked(); } function rd_socket_get() { @@ -569,7 +592,8 @@ class User { $is_super = $this->flags & USER_FLAG_TY_SUPER; $ret .= show_notify_ex(str_replace("\n", " ", $G_splash_content[$G_lang]), ($is_super ? 0 : $G_splash_timeout), - $mlang_indrd[($is_super ? 'btn_btotabsup' : 'btn_backtotab')][$G_lang], + // $mlang_indrd[($is_super ? 'btn_btotabsup' : 'btn_backtotab')][$G_lang], + $mlang_indrd['btn_backtotab'][$G_lang], $G_splash_w, $G_splash_h, true, ($is_super ? 0 : $G_splash_timeout)); $ret .= sprintf('|createCookie("CO_splashdate%d", %d, 24*365, cookiepath);', $G_splash_idx, $curtime); @@ -675,7 +699,7 @@ class User { stat step */ -function stream_init($init_string, $enc, &$header_out, &$body, $get, $post, $cookie) +function stream_init($init_string, $enc, $header, &$header_out, &$body, $get, $post, $cookie) { $curtime = time(); @@ -696,7 +720,13 @@ function stream_init($init_string, $enc, &$header_out, &$body, $get, $post, $coo $this->rd_data_set($curtime, $transp, $enc, $stat, $subst, $step, $from); - $body .= $this->rd_transp->init($enc, &$header_out, $init_string, self::base_get(), $this->rd_scristp); + $ret = $this->rd_transp->init($enc, $header, &$header_out, $init_string, self::base_get(), $this->rd_scristp); + + if ($ret === FALSE) { + return FALSE; + } + + $body .= $ret; return TRUE; } @@ -736,6 +766,11 @@ function stream_keepalive($with_ping) return ($this->rd_transp->chunk( $this->rd_scristp++, ($with_ping ? "act_ping();" : NULL))); } +function stream_close() +{ + return ($this->rd_transp->close()); +} + static function base_get() { $c = get_called_class(); @@ -743,6 +778,52 @@ static function base_get() return $c::BASE; } +function is_supp_custom() +{ + if ($this->rec != FALSE) { + if ($this->flags & USER_FLAG_TY_SUPER) { + return (TRUE); + } + /* + if ($this->rec->last_dona > 1356994800) { + return (TRUE); + } + */ + } + return (FALSE); +} + +function is_chunked() +{ + return $this->rd_is_chunked; +} + + +function chunked_content($content) +{ + if ($this->rd_zls) { + $cont_comp = $this->rd_zls->compress_chunk($content); + } + else { + $cont_comp = $content; + } + $cont_comp_l = mb_strlen($cont_comp, "ASCII"); + // printf("CHUNK: [%s]\n", $content); + + if ($this->is_chunked()) { + return (sprintf("%X\r\n", $cont_comp_l).$cont_comp."\r\n"); + } + else { + return $cont_comp; + } +} + +function chunked_fini() +{ + return sprintf("0\r\n"); +} + + } // end class User