spawn bg
[brisk.git] / web / briskin5 / Obj / briskin5.phh
index ecd4b41..11c7df3 100644 (file)
@@ -1,5 +1,7 @@
 <?php
-define(MAX_BRISKIN5_PLAYERS, 3);
+define(BRISKIN5_PLAYERS_N, 3);
+define(BRISKIN5_MAX_PLAYERS, BRISKIN5_PLAYERS_N);
+define(BRISKIN5_SHM_DIMS, (50000 * BRISKIN5_MAX_PLAYERS));
 
 class Briskin5 {
   var $user;
@@ -11,12 +13,16 @@ class Briskin5 {
   var $step; // current step of the comm array
   var $garbage_timeout;
 
+  var $the_end;
+
   var $tok;
 
   function Briskin5 (&$room, $table_idx, $table_token) {
     $this->user = array();
     $this->table = array();
 
+    $this->the_end = FALSE;
+
     if (($this->tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
       echo "FTOK FAILED";
       exit;
@@ -25,7 +31,7 @@ class Briskin5 {
     $user  =& $room->user;
     $table =& $room->table[$table_idx];
 
-    log_wr("xxx", "Briskin5 constructor");
+    log_wr("Briskin5 constructor");
 
     for ($i = 0 ; $i < $table->player_n ; $i++) {
       $user[$table->player[$i]]->table_token = $table_token;
@@ -36,7 +42,7 @@ class Briskin5 {
     $this->table_token = $table_token;
     $this->garbage_timeout = 0;
     
-    log_wr("xxx", "Briskin5 constructor end");
+    log_wr("Briskin5 constructor end");
   }
 
 
@@ -45,7 +51,7 @@ class Briskin5 {
     GLOBAL $PHP_SELF, $G_false;
 
     if (validate_sess($sess)) {
-      for ($i = 0 ; $i < MAX_BRISKIN5_PLAYERS ; $i++) {
+      for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
        if (strcmp($sess, $this->user[$i]->sess) == 0) {
          // find it
          $idx = $i;
@@ -53,12 +59,12 @@ class Briskin5 {
          return ($ret);
        }
       }
-      log_main($sess, sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
-      // for ($i = 0 ; $i < MAX_PLAYERS ; $i++) 
-      // log_main($sess, sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
+      log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
+      // for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) 
+      // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
     }
     else {
-      log_main($sess, sprintf("get_user: Wrong strlen [%s]",$sess));
+      log_main(sprintf("get_user: Wrong strlen [%s]",$sess));
     }
 
     return ($G_false);
@@ -73,16 +79,17 @@ class Briskin5 {
     $curtime = time();
     if ($force || $this->garbage_timeout < $curtime) {
       
-      for ($i = 0 ; $i < MAX_BRISKIN5_PLAYERS ; $i++) {
+      for ($i = 0 ; $i < BRISKIN5_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) { // Auto logout dell'utente
-         log_rd2($user_cur->sess, "AUTO LOGOUT.");
+         log_rd2($user_cur->sess." bin5 AUTO LOGOUT.");
 
          if ($user_cur->stat == 'table') {
-           log_auth($user_cur->sess, "Autologout session.");
+           log_auth($user_cur->sess," bin5 Autologout session.");
 
            /* SI DELEGA AL garbage_manager principale LA RIMOZIONE DELL'UTENTE 
 
@@ -94,13 +101,11 @@ class Briskin5 {
            
             */
 
-           log_rd2($user_cur->sess, "AUTO LOGOUT.");
-
            $this->table_wakeup(&$user_cur);
          }
        }
       }
-      log_rd2($user_cur->sess, "GARBAGE UPDATED!");
+      log_rd2($user_cur->sess." GARBAGE UPDATED!");
       
       $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
       $ismod = TRUE;
@@ -120,7 +125,7 @@ class Briskin5 {
     GLOBAL $G_false, $sess;
     $shm = FALSE;
 
-    log_wr($sess, "TABLE_IDX ".FTOK_PATH."/table".$table_idx);
+    log_wr("TABLE_IDX ".FTOK_PATH."/table".$table_idx);
     if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
       echo "FTOK FAILED";
       exit;
@@ -131,14 +136,14 @@ class Briskin5 {
       if (locshm_exists($tok) == FALSE)
        break;
 
-      if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE)
+      if (($shm = shm_attach($tok, BRISKIN5_SHM_DIMS)) == FALSE)
        break;
 
       if (($bri = @shm_get_var($shm, $tok)) == FALSE) 
        break;
 
       if ($table_token != "" && $bri->table_token != $table_token) {
-       log_wr($sess, "bri->table_token: ".$bri->table_token."table_token: ".$table_token);
+       log_wr("bri->table_token: ".$bri->table_token."table_token: ".$table_token);
        
        break;
       }
@@ -153,7 +158,7 @@ class Briskin5 {
     if ($shm != FALSE)
       shm_detach($shm);
 
-    log_wr($sess, "briskin5 load_data failed");
+    log_wr("briskin5 load_data failed");
     
     return ($G_false);
   }
@@ -167,7 +172,7 @@ class Briskin5 {
     $shm =   FALSE;
     $isacq = FALSE;
     
-    log_main("XXX", "SAVE BRISKIN5 DATA");
+    log_main("SAVE BRISKIN5 DATA");
     // var_dump($bri);
     
     if (!isset($bri->tok))
@@ -176,16 +181,16 @@ class Briskin5 {
     do {
       $isacq = TRUE;
       
-      if (($shm = shm_attach($bri->tok, SHM_DIMS)) == FALSE)
+      if (($shm = shm_attach($bri->tok, BRISKIN5_SHM_DIMS)) == FALSE)
        break;
       
-      // log_only($sess, "PUT_VAR DI ".strlen(serialize($bri)));
+      // log_only("PUT_VAR DI ".strlen(serialize($bri)));
       if (shm_put_var($shm, $bri->tok, $bri) == FALSE) {
-       log_only($sess, "PUT_VAR FALLITA ".strlen(serialize($bri)));
-       log_only($sess, serialize($bri));
+       log_only("PUT_VAR FALLITA ".strlen(serialize($bri)));
+       log_only(serialize($bri));
        break;
       }
-      // log_main("XXX", "QUI CI ARRIVA [".$bri->user[0]->name."]");
+      // log_main("QUI CI ARRIVA [".$bri->user[0]->name."]");
       $ret = TRUE;
     } while (0);
     
@@ -203,30 +208,30 @@ class Briskin5 {
     $shm =   FALSE;
     $isacq = FALSE;
 
-    log_main("XXX", "DESTROY BRISKIN5 DATA");
+    log_main("DESTROY BRISKIN5 DATA");
 
     
     do {
       $isacq = TRUE;
       
-      log_main("XXX", "DESTROY2 BRISKIN5 DATA");
+      log_main("DESTROY2 BRISKIN5 DATA");
 
       if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) 
        break;
 
-      if (($shm = shm_attach($tok, SHM_DIMS)) === FALSE)
+      if (($shm = shm_attach($tok, BRISKIN5_SHM_DIMS)) === FALSE)
        break;
       
       if (shm_remove($shm) === FALSE) {
-       log_only($sess, "REMOVE FALLITA ".strlen(serialize($bri)));
-       log_only($sess, serialize($bri));
+       log_only("REMOVE FALLITA ".strlen(serialize($bri)));
+       log_only(serialize($bri));
        break;
       }
    
       $shm = FALSE;
-      log_main("XXX", "DESTROY2 BRISKIN5 DATA SUCCESS");
+      log_main("DESTROY2 BRISKIN5 DATA SUCCESS");
       
-      // log_main("XXX", "QUI CI ARRIVA [".$bri->user[0]->name."]");
+      // log_main("QUI CI ARRIVA [".$bri->user[0]->name."]");
       $ret = TRUE;
     } while (0);
     
@@ -240,7 +245,7 @@ class Briskin5 {
   {
     GLOBAL $sess; 
     
-    log_wr($sess, "LOCK_DATA ".FTOK_PATH."/table".$table_idx);
+    log_wr("LOCK_DATA ".FTOK_PATH."/table".$table_idx);
     //  echo "LOCK: ".FTOK_PATH."/main";
     //  exit;
     if (($tok = ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
@@ -253,18 +258,20 @@ class Briskin5 {
       exit;
     }
     if (sem_acquire($res)) {   
-      log_only($sess, "LOCK");
+      log_lock("LOCK table ".$table_idx."[res: ".$res."]");
       return ($res);
     }
-    else
+    else {
+      log_lock("LOCK table ".$table_idx.":FAILED");
       return (FALSE);
+    }
   }
   
   function unlock_data($res)
   {
     GLOBAL $sess; 
     
-    log_only($sess, "UNLOCK");
+    log_lock("UNLOCK table [res: ".$res."]");
 
     return (sem_release($res));
   }
@@ -282,7 +289,7 @@ class Briskin5 {
     
     $dt = date("H:i ", $timecur);
     if (strncmp($user_mesg, "/nick ", 6) == 0) {
-      log_main($user->sess, "chatt_send BEGIN");
+      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)."; ";
@@ -296,7 +303,7 @@ class Briskin5 {
       // change
       // update local graph
       // update remote graphs
-      for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
+      for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
        $user_cur = &$this->user[$i];
        //      if ($user_cur->sess == '' || $user_cur->stat != 'room')
        if ($user_cur->sess == '')
@@ -308,14 +315,14 @@ class Briskin5 {
          break;
        }
       }
-      if ($i == MAX_PLAYERS) {
+      if ($i == BRISKIN5_MAX_PLAYERS) {
        $user->name = $name_new;
 
-      log_main($user->sess, "chatt_send start set");
+      log_main($user->sess." chatt_send start set");
        
 
-       for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-         log_main($user->sess, "chatt_send set loop");
+       for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
+         log_main($user->sess." chatt_send set loop");
          
          $user_cur = &$this->user[$i];
          if ($user_cur->sess == '')
@@ -326,11 +333,11 @@ class Briskin5 {
            }
            else if ($user->stat == 'room' && $user->subst == 'sitdown' ||
                     $user->stat == 'table') {
-             log_main($user->sess, "chatt_send pre table update");
+             log_main($user->sess." chatt_send pre table update");
 
              $this->table_update(&$user);
 
-             log_main($user->sess, "chatt_send post table update");
+             log_main($user->sess." chatt_send post table update");
            }
          }
          else if ($user_cur->stat == 'table' && $user_cur->table == $user->table) {
@@ -338,11 +345,11 @@ class Briskin5 {
            
            $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(" %s", " %s", " %s", " %s", " %s"); ',
-               xcape($this->user[$table->player[($user_cur->table_pos)%PLAYERS_N]]->name),
-               xcape($this->user[$table->player[($user_cur->table_pos+1)%PLAYERS_N]]->name),
-               xcape($this->user[$table->player[($user_cur->table_pos+2)%PLAYERS_N]]->name),
-               (PLAYERS_N == 3 ? "" :  xcape($this->user[$table->player[($user_cur->table_pos+3)%PLAYERS_N]]->name)),
-               (PLAYERS_N == 3 ? "" :  xcape($this->user[$table->player[($user_cur->table_pos+4)%PLAYERS_N]]->name)));
+               xcape($this->user[$table->player[($user_cur->table_pos) % BRISKIN5_PLAYERS_N]]->name),
+               xcape($this->user[$table->player[($user_cur->table_pos+1) % BRISKIN5_PLAYERS_N]]->name),
+               xcape($this->user[$table->player[($user_cur->table_pos+2) % BRISKIN5_PLAYERS_N]]->name),
+               (BRISKIN5_PLAYERS_N == 3 ? "" :  xcape($this->user[$table->player[($user_cur->table_pos+3) % BRISKIN5_PLAYERS_N]]->name)),
+               (BRISKIN5_PLAYERS_N == 3 ? "" :  xcape($this->user[$table->player[($user_cur->table_pos+4) % BRISKIN5_PLAYERS_N]]->name)));
            if ($user_cur == $user)
              $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('$("myname").innerHTML = "<b>%s</b>";', 
                                                                   xcape($user->name,ENT_COMPAT,"UTF-8"));
@@ -352,7 +359,7 @@ class Briskin5 {
       }
     }
     else {
-      for ($i = 0 ; $i < ($user->stat == 'room' ? MAX_PLAYERS : PLAYERS_N) ; $i++) {
+      for ($i = 0 ; $i < ($user->stat == 'room' ? BRISKIN5_MAX_PLAYERS : BRISKIN5_PLAYERS_N) ; $i++) {
        if ($user->stat == 'room') {
          $user_cur = &$this->user[$i];
          if ($user_cur->sess == '' || $user_cur->stat != 'room')
@@ -376,15 +383,15 @@ class Briskin5 {
   {
     $table = &$this->table[0];
 
-    log_main("BRISKIN5_WAKEUP", "begin function table  stat: ".$user->stat."  subst: ".$user->subst);
+    log_main("BRISKIN5_WAKEUP begin function table  stat: ".$user->stat."  subst: ".$user->subst);
 
     $curtime = time();
 
-    log_main("BRISKIN5_WAKEUP", "from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
+    log_main("BRISKIN5_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);
+      log_main("PREIMPOST INLOOP name: ".$user_cur->name);
       
       if ($user_cur == $user)
        $user_cur->subst = "shutdowner";
@@ -395,10 +402,12 @@ class Briskin5 {
       $ret = "gst.st = ".($user_cur->step+1)."; ";
       $ret .= 'gst.st_loc++; the_end=true; window.onunload = null; document.location.assign("../index.php");|';
 
-      log_wr($user_cur->sess, "BRISKIN5_WAKEUP: ".$ret);
+      log_wr($user_cur->sess." BRISKIN5_WAKEUP: ".$ret);
       $user_cur->comm[$user_cur->step % COMM_N] = $ret;
       $user_cur->step_inc();
     }
+
+    $this->the_end = TRUE;
   }
   
   /*
@@ -422,20 +431,20 @@ class Briskin5 {
 
     return ($is_ab);
   }
-} // end of class Briskin5
+} // end class Briskin5
 
 function locshm_exists($tok)
 {
   // return (TRUE);
 
-  if (($id = shmop_open($tok,"a", 0, 0)) == FALSE) {
-    log_main($tok, "SHM NOT exists");
+  if (($id = @shmop_open($tok,"a", 0, 0)) == FALSE) {
+    log_main($tok." SHM NOT exists");
 
     return (FALSE);
   }
   else {
     shmop_close($id);
-    log_main($tok, "SHM exists");
+    log_main($tok." SHM exists");
 
     return (TRUE);
   }