centralized space eating string management
[brisk.git] / web / Obj / user.phh
index a4e6e10..2b28adb 100644 (file)
@@ -58,72 +58,6 @@ define('USER_FLAG_TY_DISABLE', 0x800000); // done
 define('RD_ENDTIME_DELTA',  240);
 define('RD_KEEPALIVE_TOUT',   4);
 
-$G_four_rnd_string = 
- "GGZDGDRBXDWFXHGPYAAVDXEKFDUWSTEDTDVXBXQPMZAIFPNLRPTWMJAZRHXTIRNZ"
-."HTZXAUVJDCLXENDCLIZXSSEQQGUADYEKNNANJWEGRUFHPLUNSEROZQJSLMUYNUVG"
-."FPLQAGCMTTGIRRXZFBFQFTRBYPHTWFSXFKHKYBRDAOSOURCMEVGPVXJVUQAOCFPV"
-."OQSUBOYWOZLDGRPQQIBNOTHFUHTCRRZOBCUONAXIYUYCJBFTVNWIITVHBYLNMPWR"
-."LPMMIROZVRUNYXSJSMJINSXGACXDMJAEPNFFAERHVDJELXSPPJWKMNFGVGAPTIMR"
-."VMVMVCLWKMPOAJWZGPSPFEXVNQANXGLZIQSCBIYVFSTXZOODZYCXUVUZFCLFGHUJ"
-."TXZWFHSMFJQAZOQRANKZJAUJHFJIKHIIEQUSDXUBRPQBKMIAVTWYQEOIMYKKDTEV"
-."EYERPXKFJXWNIMJPOFFMWJCJSLFZKPNRNVXIDLUSRVBGLUCQZCUQCZNAORDXMRSS"
-."UBNMPXJDQXXLMQRCTOCCJJWHFSUWBNWXWZHPKWYYKPZIMBXTYAZXJJQSBLNAQGJI"
-."AIXZUHNTQYFSGUYMVOWEGUWWRBEMRJHXXOMLRXXWJZLPGLMKEANZWWXIXPIUTURJ"
-."TCXYIKIPNTSUIOWBCEVQHLTHYQNGBHAOPREWGJVOQKNUKTXVTMBRHCERDGYWQVXB"
-."BCZUGMIJXALLIOSXCYMEIDNTPLGRMKXKVFKWGRFKCBIRASOOYIFTLXFSBEOJSDFN"
-."PHSWPGERDYIGUPDXUBSAFCHTPJNBORIRMAOCKGAMFFZUBTVSGEEFMYMEBPUVCRSP"
-."DEEAROBQLJHNMCDAFMPLUKNZXTTJJIULUTDTLEZLVMRLKNLXGCQIGFCBHEWDHNPW"
-."VRONBYCXVRGNQUMFSRADSIFLNRMQXAZKQUKYXGOAKTSLWVSBJMQYZMULCNYKFFUC"
-."LKIPNJOURQLYDHLZYPHEJXPBYTXTGVZOGQUZXAORYINAOTRJCNEDPAXSJIQICWEY"
-."UEJPQALSYHKYZLPJTMBLIDNFRFLTIOVZZTEWPSJCUNDWUDZWJKDDRJEXOICJBSYP"
-."ZHLECBYVMMYLCCPCSVOVPEHEWQDJYSCOWTKFHTWVTSBCQSFKQFCNTGOQBEPSEXKR"
-."AMJIKXZCWLPXMEUBLRJHNEVGMTGARBOBLOYPWUCWSBVTMZBIBRDCNOYXLPSDZODN"
-."JSZXXQUCJZKIYOCCRHYALAJSYXFMWBAOIVAJWIAPOECUJAMFPCOCZDBDHRTBUWWJ"
-."EJYZESNKIXFEBENSOHLCNSQPWGGJLOMTFEZVWWQAKPIFGUUUMWOKLXDUPFMOEKQG"
-."ELOIQAUJPPIJZWKTCYQTJWXCBJMQWIOLQWJIASSXSFLWGUSETHRKEJHCHBOFLJJC"
-."KPPLOTKBXSKUOSNSFHOJRCKXOKQHETCGSMABVALDSBAXBQRFNNJGIDZMNUYQYDHX"
-."DJAHJBJSUEHADPSHOPOXEIRQPEAJEMEBWNXTOSGEQFUVXVHZDYHRUXCRICUHYUHA"
-."FXXGTKWVDDMDSLXEVKZUNTEUKWAGSAWPHGQHEBUMQDHZDVIFVFNDXDUEVZVGSBCQ"
-."STWYUOIHBOQQBAIAQJVNDZQVWHNXHMROIMXNCZRHYXUBFYLEZTWFCYOVILASEFSH"
-."ZUQSNNTYEOCSTRDJPFHCPTDEWCQNEDFOQCZMXKCFIANKWOVDARXWRUCTPYPGTEZB"
-."PERZIMOHRCNBYYJVYFBQJARSULMIAQPILDHEMKNVWMGFQBGZRSQZWZBMSDYKLOTA"
-."VUILKBJADGDTEZENLJEOYPXIXJWIJXONTLXBRLIJFQZORAJIIZQRCUOZLVUTIHXI"
-."NDRVVDJTEIKVLKZVRWHINEYVRGJHXLRNDCNFIYFRUUWMKKGHCPWLZKFULMJOIGJZ"
-."OONOCNPLEJIBKYFDGEQEMMWYBNBWPDRCEIUMFTYAULDBHSHAGPFWVTZXYQGUAXYN"
-."JGGOAMNBBFFSCDSXRTPOHBOVZEXYKAENIWSMBOXGQQTDTIBPSXFHMQUMMKNYYWIC"
-."MFDWSMZDWHGCEWQHFTIMDGTMCEFKWMBAVPEBTCKHRRTLAYEGZTINIWYCUJRZMBPS"
-."TLLEDLEPSAFMQPHYNJWBSSXKEMKLEZIAVNYIOUOTKGYUYJBKBSBQCFRXKOQABUWF"
-."YCNLGXGTLWMLEJVSNDIAMYSXSYFLMNGBOZSREPCPQLRCLNYFVKTWUWBNYAPZTJVO"
-."ONEPJBVBIOPBGVUNWUWZZBJEBDWUWUNFDBOICCGKXDBQWSWFUMIYRCXHLDWFKDUO"
-."PBGTXWNOMUEBENXMARIGPKDETSZNTRODQZYNJJDMYSUBOLPWOEWEVESPLXIKLELG"
-."DCIPTCCKJNNDBRCNVNHVZWPKWPUWLSOORQHNXRBZHHIYPJNBIRCZCIGGEMYKNWXV"
-."TLCLXTIYRVUXONAJUCNMWHNMUSHRWHOEQTTGYJRJEZKNHLVUXUKQQYREZXWRNQKO"
-."BDZTUGIKACSXLRJLESYYPLRFCFVSWJSZYPJBLBTPSEGUZOEXDIXEVWZJEOMOJOIB"
-."QNXNFUXBRJYXMDXQOLVWVLZZMTEMTYRZBWUEEFIBOWXAPKEIQIZZCLMWAOBZVFTP"
-."QQPBYCCLEYRLXVBPMUUMUDPECMDFSVJNKKAEMBYJJXMZGWYTAHECIXAFGWAOGIWV"
-."GAOHCMVHJZVWZCHJWGJJDBZNDXPXOYTDVZEDPWZIIMQVCQPLQIEOSRPVVICTZKGX"
-."JXSFDFUHKKOTXTEGLDSCAODMCVGSSEYANCXJDATMRJRIDLLIJHINSOXJQDEABCVU"
-."WFXWKXJQEREZDLOVUQHYBESHNJWTESPNDVIKYLCTNQEVVUXAWFNQEYIVZXNMJEPL"
-."MFMTOKXXFQYYVBHAXYQVUBALQLSNJSVOTZDDTOZMUEVZJATXQNQVSFXWTGACHUDD"
-."QXCPCRLSREKXHKJNUYUJGIGCNWXUSXOGGYPQWFZDJCKKZONXJUSJKBYIPJSMPVIN"
-."UFBIFNROMBTKQPBIZYJWLPQIJLNTLHTUEWFINOQQDAHCXXKVADTEDBANOPIJBXXC"
-."NAEZOVJAISUQBCBNOYIJBXMRPYPKXBFKFVGQLOEFPOCTZHJXKGUPZQPZOZWXXSSH"
-."SLBGVGVPRAFJCVRKWLSWLMHBMYOKVJDCZSQBLTGSOJDJHOVIDEBKJZNAQYLFIEYS"
-."AYHOSGGDDJAAVTMBYFREMEPLWZXYZUYYRQWKQBLKAPDXMMHCBWSARJCHPGZFCVJG"
-."OXXKCMWTVMKHUUSUMQOGNIHKIIAXNOAHPRIWHDOBJTRKSZAKOMHWTPQQXGZBOPIP"
-."FQEVUBULHGESOARVICLMSUSHHTVYLFMLHFGKJNPYIYEMLBAZMLIDDSWRCVFOUSGC"
-."TUQHWTUHRJUZHYQOKTWTLRVOSWRPSYBOBSZHZLRZEIZKKCMLNYICCUTIXNXETTKL"
-."PYIFTUDCMWRQBZDROXTTVTAOOIQHIWOZESRHKPNGNCSHNAVEWUSGOTZCRNFSIXGF"
-."QJUMUFPEZBFPOVGZZDCGDKEODSWAPNDNHVJUQDYLCXWNXSCDFFFPBTDOIZIZLBBP"
-."ZXZYWTTPEUUCKXGBTXAJBAXYLMUVWWGWZYTXTKYVRXSOXOBHERLZJPRDXIQZRQLU"
-."TXCLIJNKIRWMVQEJTLHZIDTNGBOYSULGWUTSYTKGNMGZFWKXCCZXGOQGZNQFZJUK"
-."JMBQPQPZOPYTQMPEFTZUDLIIBZAZSZAPNILMIKMPKXJIRHRQMFSTJKAPIIQWOFYQ"
-."HGANJGJSUGDIENDVEQFEMUJBGMZBPHLOARCVGMUUCHLCDDNKSJSCKYSALUAGUZFN"
-."YVURVLREBESGXPANIDKGLPJZGXLKFKTPEQBQEINOYYZTBMPFBLBKIKVPAPFDKKRZ"
-."YMVUBYCYTRXCIICUPTXKGQOIJSVSWPYVALIROWGVXDXGNSRVZOLEJHNRSUKHNTRJ"
-."LQZQKBEFXYKIPXJRZMQMJKUGCNUKBZBWABPLHMAJJZVBCWOQYCLSGDUKJSTHTVXV"
-."OUGJVADGJWGVNBNXYRZDSNLOZDIQRKOQAKJJDKXRMMTXRVTLOMTETNROPDYNXAGR";
-
 $S_load_stat = array( 'rU_heavy'      => 0,
                       'lL_laccgarb'   => 0,
                       'wU_lacc_upd'   => 0,
@@ -186,6 +120,8 @@ class User {
   var $chat_dlt;      // Delta t for ban
   var $shm_sz;
 
+  const BASE = "";    // basepath for absolute web references
+
   function User() {
   }
 
@@ -526,7 +462,7 @@ class User {
       log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] ");
       
       do {
-          if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) {
+          if (($tok = @ftok(FTOK_PATH."/user".$id, "C")) == -1) {
               log_main("ftok failed");
               break;
           }
@@ -593,7 +529,7 @@ class User {
       
       $shm =   FALSE;
       
-      if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) {
+      if (($tok = @ftok(FTOK_PATH."/user".$id, "C")) == -1) {
           return (FALSE);
       }
       while ($user->shm_sz < SHM_DIMS_U_MAX) {
@@ -635,7 +571,7 @@ class User {
 
   /* INDEX_RD_IFRA PORT */
 
-  static function blocking_error($is_unrecoverable)
+  protected function blocking_error($is_unrecoverable)
   {
       GLOBAL $is_page_streaming;
       
@@ -645,22 +581,23 @@ class User {
   }
   
   // FIXME TO SUPPORT iframe
-  static function page_sync($sess, $page, $table_idx, $table_token)
+  protected function page_sync($sess, $page, $table_idx, $table_token)
   {
       GLOBAL $is_page_streaming;
       
-      log_rd2("page_sync:".var_export(debug_backtrace()));
+      // log_rd2("page_sync:".var_export(debug_backtrace()));
       
       $is_page_streaming = TRUE;
       
       log_rd2("PAGE_SYNC");
+      printf("xXx USER::PAGE_SYNC [%s]\n", get_class($this));
       return (sprintf('createCookie("table_idx", %d, 24*365, cookiepath); createCookie("table_token", "%s", 24*365, cookiepath); hstm.stop(); window.onunload = null; window.onbeforeunload = null; document.location.assign("%s");', $table_idx, $table_token, $page));
   }
 
 
 
 
-  function maincheck($cur_stat, $cur_subst, $cur_step, &$new_stat, &$new_subst, &$new_step, $splashdate)
+  protected function maincheck($cur_stat, $cur_subst, $cur_step, &$new_stat, &$new_subst, &$new_step, $splashdate, $table_idx, $table_token)
   {
       GLOBAL $G_lang, $mlang_indrd, $is_page_streaming;
       // GLOBAL $first_loop;
@@ -676,23 +613,6 @@ class User {
       $ret = FALSE;
       $curtime = time();
       
-      if ((($curtime - $this->lacc) >  STREAM_TIMEOUT) || Room::garbage_time_is_expired($curtime)) {
-          $S_load_stat['lL_laccgarb']++;
-          
-          if (($curtime - $this->lacc) >=  STREAM_TIMEOUT) {
-              $S_load_stat['wU_lacc_upd']++;
-              $this->lacc = $curtime;
-          }
-          
-          if (Room::garbage_time_is_expired($curtime)) {
-              log_only("F");
-              
-              $S_load_stat['wR_garbage']++;
-              log_main("pre garbage_manager TRE");
-              $this->room->garbage_manager(FALSE);
-          }
-      }
-      
       /* Nothing changed, return. */
       if ($cur_step == $this->step) 
           return (FALSE);
@@ -707,7 +627,7 @@ class User {
           $S_load_stat['wR_minusone']++;
           
           if ($this->the_end == TRUE) { 
-              log_rd2("main_check: the end".var_export(debug_backtrace()));
+              // log_rd2("main_check: the end".var_export(debug_backtrace()));
               $is_page_streaming = TRUE;
           }
           
@@ -756,7 +676,9 @@ class User {
            ***************/
           else if ($this->stat == 'table') {
               log_load("RESYNC");
-              return (self::page_sync($this->sess, "briskin5/index.php", $this->table, $this->table_token));
+              printf("xXx USER::MAINCHECK1 [%s]\n", get_class($this));
+
+              return ($this->page_sync($this->sess, "briskin5/index.php", $this->table, $this->table_token));
           }
           log_rd2("NEWSTAT: ".$this->stat);
       } /* if ($cur_step == -1) { */
@@ -771,7 +693,8 @@ class User {
                           $to_stat = $this->stat;
                           /* Room::unlock_data($sem); */
                           log_load("RESYNC");
-                          return (self::page_sync($this->sess, ($to_stat == "table" ? "briskin5/index.php" : "index.php"), $this->table, $this->table_token));
+                          printf("xXx USER::MAINCHECK2 [%s]\n", get_class($this));
+                          return ($this->page_sync($this->sess, ($to_stat == "table" ? "briskin5/index.php" : "index.php"), $this->table, $this->table_token));
                       }
                       log_rd2("lost history, refresh from scratch");
                       $new_step = -1;
@@ -816,24 +739,22 @@ class User {
       return ($ret);
   }  //   function maincheck (...
 
-static function stream_fini($is_unrecoverable)
+  public static function stream_fini($init_string, $is_unrecoverable)
 {
-    GLOBAL $G_four_rnd_string;
-
     // IF IFRAME THEN:
     $body = "";
     $body .= sprintf("<html>
 <head>
-<script type=\"text/javascript\" src=\"commons.js\"></script>
-<script type=\"text/javascript\" src=\"xynt-http-streaming-ifra.js\"></script>
+<script type=\"text/javascript\" src=\"%scommons.js\"></script>
+<script type=\"text/javascript\" src=\"%sxynt-http-streaming-ifra.js\"></script>
 <script type=\"text/javascript\">
-var http_streaming = \"ready\";");
+var http_streaming = \"ready\";", self::base_get(), self::base_get());
     $body .= sprintf("
 window.onload = function () { if (http_streaming != \"ready\") { http_streaming.reload(); } };
 </script>
 </head>
 <body>");
-    $body .= sprintf("<!-- \n%s -->\n", $G_four_rnd_string);
+    $body .= sprintf("<!-- \n%s -->\n", $init_string);
     $body .= sprintf("<script id='hs%d' type='text/javascript'><!--
 push(\"%s\");
 // -->
@@ -853,12 +774,12 @@ push(\"%s\");
    stat
    step
 */
-function stream_init(&$header_out, &$body, $get, $post, $cookie)
+function stream_init($init_string, &$header_out, &$body, $get, $post, $cookie)
 {
-    GLOBAL $G_four_rnd_string;
-
     $curtime = time();
 
+    printf("CLASS: [%s] base: [%s]\n", get_class($this), self::base_get());
+
     $is_page_streaming = FALSE; // (webservers_exceeded() || stristr($HTTP_USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; rv:5.0)") || stristr($HTTP_USER_AGENT, "MSIE") || stristr($HTTP_USER_AGENT, "CHROME") ? TRUE : FALSE);
 
     $header_out['Cache-Control'] = 'no-cache, must-revalidate';     // HTTP/1.1
@@ -877,13 +798,14 @@ function stream_init(&$header_out, &$body, $get, $post, $cookie)
         unset($step);
     
     $this->rd_data_set($curtime, $stat, $subst, $step, $from);
+    $cc = get_called_class();
 
     $body .= sprintf("<html>
 <head>
-<script type=\"text/javascript\" src=\"commons.js\"></script>
-<script type=\"text/javascript\" src=\"xynt-http-streaming-ifra.js\"></script>
+<script type=\"text/javascript\" src=\"%scommons.js\"></script>
+<script type=\"text/javascript\" src=\"%sxynt-http-streaming-ifra.js\"></script>
 <script type=\"text/javascript\">
-var http_streaming = \"ready\";");
+var http_streaming = \"ready\";", self::base_get(), self::base_get());
     if ($this->rd_scristp > 0)
         $body .= sprintf("last_clean = %d;\n", ($this->rd_scristp-1));
     $body .= sprintf("
@@ -891,7 +813,7 @@ window.onload = function () { if (http_streaming != \"ready\") { http_streaming.
 </script> 
 </head>
 <body>");
-    $body .= sprintf("<!-- \n%s -->\n", $G_four_rnd_string);
+    $body .= sprintf("<!-- \n%s -->\n", $init_string);
 
     return TRUE;
 }
@@ -899,12 +821,14 @@ window.onload = function () { if (http_streaming != \"ready\") { http_streaming.
 function stream_main(&$body, $get, $post, $cookie)
 {
     GLOBAL $is_page_streaming, $G_splash_idx;
-    // FIXME: only to test fwrite
-    // GLOBAL $G_four_rnd_string;
 
     $CO_splashdate = "CO_splashdate".$G_splash_idx;
     if (($splashdate = gpcs_var("$CO_splashdate", $get, $post, $cookie)) === FALSE)
         $splashdate = ""; 
+    if (($table_idx = gpcs_var("table_idx", $get, $post, $cookie)) === FALSE)
+        $table_idx = ""; 
+    if (($table_token = gpcs_var("table_token", $get, $post, $cookie)) === FALSE)
+        $table_token = ""; 
 
     $is_page_streaming = FALSE;
     log_rd2("FROM OUTSIDE - STAT: ".$this->rd_stat." SUBST: ".$this->rd_subst." STEP: ".$this->rd_step." FROM: ".$this->rd_from. "IS_PAGE:" . $is_page_streaming);
@@ -915,7 +839,8 @@ function stream_main(&$body, $get, $post, $cookie)
     $old_stat  = $this->rd_stat;
     $old_subst = $this->rd_subst;
     $old_step  = $this->rd_step;
-    if (($ret = maincheck($this, $old_stat, $old_subst, $old_step, $this->rd_stat, $this->rd_subst, $this->rd_step, $splashdate)) != FALSE) {
+    printf("xXx PRE : rd_step %d\n", $this->rd_step);
+    if (($ret = $this->maincheck($old_stat, $old_subst, $old_step, $this->rd_stat, $this->rd_subst, $this->rd_step, $splashdate, $table_idx, $table_token)) != FALSE) {
         $body .= sprintf("<script id='hs%d' type='text/javascript'><!--
 push(\"%s\");
 // -->
@@ -925,50 +850,29 @@ push(\"%s\");
         if ($is_page_streaming) 
             return TRUE;
     }
-    
+    printf("xXx POST: rd_step %d\n", $this->rd_step);
+
     return TRUE;
 }
 
-function stream_keepalive()
+function stream_keepalive($with_ping)
 {
-    return (sprintf("<script id='hs%d' type='text/javascript'><!--
-push(null);
+    $ret =  (sprintf("<script id='hs%d' type='text/javascript'><!--
+push(%s);
 // -->
-</script>", $this->rd_scristp++));
-    
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+</script>", $this->rd_scristp++, ($with_ping ? "\"act_ping();\"" : "null")));
 
+    return ($ret);
+}
 
+static function base_get()
+{
+    $c = get_called_class();
+    printf("CALLED_CLASS: [%s]\n", $c);
+    return $c::BASE;
+}
 
 } // end class User
 
 
-?>
\ No newline at end of file
+?>