pre-merge into master
[brisk.git] / web / briskin5 / Obj / briskin5.phh
index b29a580..10edf1b 100644 (file)
@@ -183,7 +183,7 @@ class Bin5_table extends Table {
        $thiz->asta_pla_n=  -1;
        $thiz->asta_card =  -1;
        $thiz->asta_pnt  =  -1;
-       $thiz->mult      =   1;
+       $thiz->mult      =   0;
     
        $thiz->points    =   array( );
        $thiz->points_n  =   0;
@@ -260,7 +260,7 @@ class Bin5_table extends Table {
         $thiz->bunch_create();
         $thiz->mazzo    = rand(0,PLAYERS_N-1);
         $thiz->points_n = 0;
-        $thiz->mult     = 1;
+        $thiz->mult     = 0;
         $thiz->old_win    = -1;
         $thiz->old_reason = "";
 
@@ -274,6 +274,32 @@ class Bin5_table extends Table {
         return ($thiz);
     }
 
+    function asta2mult($asta_pnt)
+    {
+        if ($asta_pnt > 110)
+            return (6);
+        else if ($asta_pnt > 100)
+            return (5);
+        else if ($asta_pnt > 90)
+            return (4);
+        else if ($asta_pnt > 80)
+            return (3);
+        else if ($asta_pnt > 70)
+            return (2);
+        else
+            return (1);
+    }
+
+    function multer($is_new)
+    {
+        if ($is_new) {
+            return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt));
+        }
+        else {
+            return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt));
+        }
+    }
+
 
     //   function bunch_create_old() function AND 
     //   {
@@ -329,7 +355,7 @@ class Bin5_table extends Table {
         /* MOVED INTO SPAWN
            $this->mazzo    =  rand(0,PLAYERS_N-1);
            $this->points_n =  0;
-           $this->mult     =  1;
+           $this->mult     =  0;
            $this->old_win  = -1;
            $this->old_reason = "";
         */
@@ -477,7 +503,7 @@ class Bin5_user extends User {
        } 
     */
     
-    function spawn($from, &$bri, $table, $table_pos, $get, $post, $cookie)
+    static function spawn($from, &$bri, $table, $table_pos, $get, $post, $cookie)
     {
         if (($thiz = new Bin5_user()) == FALSE)
             return (FALSE);
@@ -499,7 +525,7 @@ class Bin5_user extends User {
         
         log_wr("Bin5 constructor");
         
-        $this->privflags  = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0;
+        $thiz->privflags  = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0;
 
         $thiz->table_orig = $table;
         $thiz->table      = 0;
@@ -614,7 +640,7 @@ class Bin5_user extends User {
         return ($ret);
     }
 
-    protected function blocking_error($is_unrecoverable)
+    static function blocking_error($is_unrecoverable)
     {
         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");'));
@@ -775,28 +801,7 @@ class Bin5 {
     var $the_end;
     var $tok;
 
-    static function page_manager($room, $header_out, $path, $method, $addr, $get, $post, $cookie) 
-    {
-        switch ($path) {
-        case "":
-        case "index.php":
-            ob_start();
-            bin5_index_main($room, $header_out, $addr, $get, $post, $cookie);
-            $content = ob_get_contents();
-            ob_end_clean();
-            
-            force_no_cache($header_out);
-
-            $pgflush = new PageFlush($new_socket, $curtime, 20, $header_out, $content);
-            
-            if ($pgflush->try_flush($curtime) == FALSE) {
-                // Add $pgflush to the pgflush array
-                array_push($pages_flush, $pgflush);
-            }
-            break;
-        }
-        return TRUE;
-    }
+    var $delay_mgr;
 
     function Bin5 ($room, $table_idx, $table_token, $get, $post, $cookie) {
         $this->user = array();
@@ -826,6 +831,8 @@ class Bin5 {
         $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");
     }
     
@@ -862,6 +869,9 @@ class Bin5 {
         /* Garbage collector degli utenti in timeout */
         $ismod = FALSE;
         $curtime = time();
+
+        $delta = $this->delay_mgr->delta_get($curtime);
+
         if ($force || $this->garbage_timeout < $curtime) {
             for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
                 $user_cur = $this->user[$i];
@@ -869,7 +879,7 @@ class Bin5 {
                     ($user_cur->stat == 'table' && ($user_cur->subst == 'shutdowned' || $user_cur->subst == 'shutdowner')))
                     continue;
                 
-                if ($user_cur->lacc + EXPIRE_TIME_RD < $curtime) { // Auto logout dell'utente
+                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') {
@@ -905,6 +915,7 @@ class Bin5 {
             $ismod = TRUE;
         }
         
+        $this->delay_mgr->lastcheck_set($curtime);
         return ($ismod);
     }
     
@@ -1083,7 +1094,7 @@ class Bin5 {
                                                                      $dt, $user->flags, xcape($user->name), xcape($user_mesg));
                 $user_cur->step_inc();
             }
-            log_legal($curtime, 'xxx', $user, ($user->stat == 'room' ? 'room' : 'table '.$user->table_orig),$user_mesg);
+            log_legal($curtime, $user->ip, $user, ($user->stat == 'room' ? 'room' : 'table '.$user->table_orig),$user_mesg);
         }
     }
 
@@ -1142,11 +1153,18 @@ class Bin5 {
 
     static function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
     {
+        GLOBAL $G_black_list;
+
         printf("NEW_SOCKET (root): %d\n", intval($new_socket));
         
         $enc = get_encoding($header);
-        if (isset($header['User-Agent']) && strstr($header['User-Agent'], "MSIE")) {
-            $transp_type = "htmlfile";
+        if (isset($header['User-Agent'])) {
+            if (strstr($header['User-Agent'], "MSIE")) {
+                $transp_type = "htmlfile";
+            }
+            else {
+                $transp_type = "xhr";
+            }
         }
         else {
             $transp_type = "iframe";
@@ -1168,7 +1186,7 @@ class Bin5 {
             $content = ob_get_contents();
             ob_end_clean();
         
-            $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content);
+            $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
             return TRUE;
         
         break;
@@ -1181,8 +1199,14 @@ class Bin5 {
                     $content = ob_get_contents();
                     ob_end_clean();
                 }
+                else {
+                    $content = "Bin5 Load data error";
+                }
+            }
+            else {
+                $content = "Bin5 Load data error";
             }
-            $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content);
+            $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
             return TRUE;
             
             break;
@@ -1194,8 +1218,8 @@ class Bin5 {
                     || ($bri = $s_a_p->app->match_get($table_idx, $table_token)) == NULL
                     || (($user = $bri->get_user($cookie['sess'], $idx)) == FALSE)) {
 
-                    $content = Bin5_user::stream_fini($s_a_p->rndstr, TRUE);
-                    $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content);
+                    $content = Bin5_user::stream_fini($transp_type, $s_a_p->rndstr, TRUE);
+                    $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
 
                     return TRUE;
                     break;
@@ -1224,7 +1248,7 @@ class Bin5 {
                 fflush($new_socket);
                 
                 
-                $s_a_p->socks_set($new_socket, $user);
+                $s_a_p->socks_set($new_socket, $user, NULL);
                 $user->rd_socket_set($new_socket);
                 printf(" - qui ci siamo - ");
                 return TRUE;
@@ -1263,21 +1287,6 @@ function locshm_exists($tok)
     
 }
 
-function asta2mult($asta_pnt)
-{ 
-    if ($asta_pnt > 110) 
-        return (5);
-    else if ($asta_pnt > 100) 
-        return (4);
-    else if ($asta_pnt > 90) 
-        return (3);
-    else if ($asta_pnt > 80) 
-        return (2);
-    else if ($asta_pnt > 70) 
-        return (1);
-    else
-        return (0);
-}
 
 // rendiamo qui l'elenco dei punti come return della func
 function calculate_points(&$table)
@@ -1296,6 +1305,7 @@ function calculate_points(&$table)
     $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;
@@ -1306,8 +1316,8 @@ function calculate_points(&$table)
 
     log_wr(sprintf("PRO: [%d]", $pro));
 
-  
-    if ($table->asta_pnt == 61 && $pro == 60) { // PATTA !
+    // 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;
@@ -1325,8 +1335,6 @@ function calculate_points(&$table)
     else
         $sig = -1;
 
-    $gamult = asta2mult($table->asta_pnt);
-  
     $table->points[$table->points_n % MAX_POINTS] = array();
     for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
         if ($i == $table->asta_win) 
@@ -1340,9 +1348,9 @@ function calculate_points(&$table)
 
         log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pt));
 
-        $pt = $pt * $sig * ($gamult + $table->mult) * ($pro == 120 ? 2 : 1);
+        $pt = $pt * $sig * $table->multer(TRUE) * ($pro == 120 ? 2 : 1);
 
-        log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $table->mult, ($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;
@@ -1350,7 +1358,7 @@ function calculate_points(&$table)
     }
     $table->points_n++;
     $table->old_pnt = $pro;
-    $table->mult = 1;
+    $table->mult = 0;
   
     return($ret);
 }
@@ -1407,7 +1415,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
         $ret .= "setTimeout(preload_images, 500, g_preload_img_arr, g_imgct);";
     }
     if (!$is_again) 
-        $ret .= table_wellcome($user);
+        $ret .= table_welcome($user);
 
     if ($is_transition && !$is_again) { // appena seduti al tavolo, play della mucca
         $ret .= playsound("cow.mp3");
@@ -1667,8 +1675,9 @@ function show_table_info(&$bri, &$table, $table_pos)
                                  ($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])));
             }
         }
-        if (($table->old_mult + asta2mult($table->old_asta_pnt)) > 1) {
-            $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], multoval($table->old_mult + asta2mult($table->old_asta_pnt)));
+        $old_multer = $table->multer(FALSE);
+        if ($old_multer > 1) {
+            $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], multoval($old_multer));
         }
         $noty .= "<hr><br>";
     }
@@ -1699,8 +1708,9 @@ function show_table_info(&$bri, &$table, $table_pos)
         $noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam);
     }
   
-    if (($table->mult + asta2mult($table->asta_pnt)) > 1) {
-        $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($table->mult + asta2mult($table->asta_pnt)));
+    $multer = $table->multer(TRUE);
+    if ($multer > 1) {
+        $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($multer) );
     }
     $noty .= "<hr><br>";
     $ret .= show_notify($noty, 3000, $mlang_bin5_bin5['btn_bkgame'][$G_lang], 500, 400);
@@ -1714,7 +1724,7 @@ function show_table_info(&$bri, &$table, $table_pos)
     return ($ret);
 }
 
-function table_wellcome($user)
+function table_welcome($user)
 {
     GLOBAL $table_wellarr, $G_lang;
     $ret = "";