X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=36060d87c181c19815cabd3964a6c014c63f981f;hb=2dafd9b1a8edbf64595bee1e669be6c95921bf61;hp=5ed3588a35e10ac4623fcd4e85532234e67c3543;hpb=19608661d2c4cdd071374e5c18a0c031808f0f85;p=brisk.git diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 5ed3588..36060d8 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -58,7 +58,7 @@ define('EXPIRE_TIME_WAG', 10); define('WAKEUP_TIME', 12); // BAN_TIME da allineare anche in commons.js define('BAN_TIME', 3600); -define('GARBAGE_TIMEOUT', 10); +define('GARBAGE_TIMEOUT', 5); define('NICKSERV', "BriskServ"); define('LOCK_SHARE_MAX', 10000); @@ -140,10 +140,10 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', $G_lng = langtolng($G_lang); $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "4.5.2"; +$G_brisk_version = "4.6.0"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ -$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': nuova visualizzazione dello stato della connessione dati, indirizzo IP sorgente memorizzato correttamente nei log.', +$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': aggiunti script di avvio automatico, gestione dei segnali e logging dell\' ultima connessione.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ), 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: usage of reader/writer locking instead of generic exclusive locking.', 'If you want to subscribe our Mailing List, click it!' ) ); @@ -337,42 +337,6 @@ function file_unlock($res) } } -function webservers_exceeded() -{ - return(file_exists(PROXY_PATH."/webservers_exceded.flag")); -} - -function webservers_check() -{ - GLOBAL $G_webserver_max; - - /* FIXME: check all procs expirations */ - return (10); - - $ct = 0; - - $dh = opendir('/proc'); - while (($file = readdir($dh)) !== false) { - if (preg_match('/[0-9]+/', $file)) { - $cmdline = explode("\0", file_get_contents('/proc/'.$file.'/cmdline')); - // echo "xxx".$cmdline[0].$n; - if (strstr('/usr/sbin/apache2', $cmdline[0]) != FALSE) { - // echo "yyy".$cmdline[0].$n; - $ct++; - } - } - } - closedir($dh); - - if ($ct >= $G_webserver_max) { - touch(PROXY_PATH."/webservers_exceded.flag"); - } - else { - unlink(PROXY_PATH."/webservers_exceded.flag"); - } - return ($ct); -} - $escpush_from = array("\\", "\""); $escpush_to = array("\\\\", "\\\""); function escpush($s) @@ -682,6 +646,63 @@ class Table { } // end class Table +class Delay_Manager +{ + var $delta; + var $lastckeck; + var $triglevel; + + function Delay_Manager($triglevel) + { + $this->triglevel = $triglevel; + $this->delta = array(); + $this->lastcheck = 0; + } + + function delta_get($curtime) + { + // clean too old delta items + for ($i = 0 ; $i < count($this->delta) ; $i++) { + if ($this->delta[$i][0] < $curtime) { + array_splice($this->delta, $i, 1); + $i--; + } + } + + // add new delta items if delay exceeded $this->triglevel sec + if ($curtime > $this->lastcheck + $this->triglevel && $curtime < $this->lastcheck + 1200.0) { + $delta = $curtime - $this->lastcheck - $this->triglevel; + array_push($this->delta, array($curtime + $delta , $delta)); + // fprintf(STDERR, "DELTA: add new delta [%f] [%f] [%f]\n", $this->triglevel, $curtime + $delta, $delta); + } + + // extract the maximum valid delta + $delta_max = 0.0; + for ($i = 0 ; $i < count($this->delta) ; $i++) { + $delta_cur = $this->delta[$i][1]; + if ($delta_max < $delta_cur) + $delta_max = $delta_cur; + } + + // fprintf(STDERR, "DELTA: status %d, delta_max: %f\n", count($this->delta), $delta_max); + + return ($delta_max); + } + + function lastcheck_set($curtime) + { + $this->lastcheck = $curtime; + } +} + +class Client_prefs { + var $listen; + + function Client_prefs($listen) + { + $this->listen = $listen; + } +} class Room @@ -697,6 +718,8 @@ class Room var $garbage_timeout; var $shm_sz; + var $delay_mgr; + function Room ($crystal_filename) { $this->crystal_filename = $crystal_filename; $this->user = array(); @@ -726,6 +749,8 @@ class Room } $this->garbage_timeout = 0; $this->shm_sz = SHM_DIMS_MIN; + + $this->delay_mgr = new Delay_Manager(1.5); } function garbage_manager($force) @@ -737,14 +762,15 @@ class Room log_rd2("garbage_manager START"); /* Garbage collector degli utenti in timeout */ - $curtime = time(); + $curtime = microtime(TRUE); + + $delta = $this->delay_mgr->delta_get($curtime); if (!$force && !($this->garbage_timeout < $curtime)) { + $this->delay_mgr->lastcheck_set($curtime); return ($ismod); } - webservers_check(); - // Before all align times with table timeout for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) { $table_cur = $this->table[$table_idx]; @@ -765,7 +791,6 @@ class Room $bri = FALSE; } - if ($bri != FALSE) { // // SPAWN: JOIN @@ -856,9 +881,9 @@ class Room if ($user_cur->sess == "") continue; - if ($user_cur->lacc + EXPIRE_TIME_RD < $curtime) { + if ($user_cur->lacc + EXPIRE_TIME_RD < ($curtime - $delta)) { // Auto logout dell'utente - log_rd2("AUTO LOGOUT.".($user_cur->lacc + EXPIRE_TIME_RD)." curtime ".$curtime); + log_rd2("AUTO LOGOUT.".($user_cur->lacc + EXPIRE_TIME_RD)." curtime - delta ".($curtime - $delta)); if ($user_cur->stat == 'table' || $user_cur->stat == 'room') { log_auth($user_cur->sess, "Autologout session."); @@ -875,7 +900,7 @@ class Room } } - if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < $curtime) { // lo rimettiamo in piedi + if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < ($curtime - $delta)) { // lo rimettiamo in piedi if ($user_cur->stat == 'room' && $user_cur->subst == 'sitdown') { $this->room_wakeup($user_cur); $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; @@ -890,6 +915,7 @@ class Room $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT; $ismod = TRUE; + $this->delay_mgr->lastcheck_set($curtime); return ($ismod); } @@ -900,14 +926,20 @@ class Room $ret = sprintf('gst.st = %d; ', $user_step); - if ($user->flags & USER_FLAG_ISOLAUTH) { - $ret .= 'list_set(\'isolation\', false, \''.$mlang_brisk['tit_onisol'][$G_lang].'\' ); '; - } - else if ($user->flags & USER_FLAG_LISTAUTH) { - $ret .= 'list_set(\'auth\', false, \''.$mlang_brisk['tit_onauth'][$G_lang].'\' ); '; - } - else { - $ret .= 'list_set(\'all\', false, \'\' ); '; + // for test: $prefs = new Client_prefs(USER_FLAG_LISTAUTH >> 2); + $prefs = new Client_prefs(($user->flags & USER_FLAG_MAP_AUTH) >> 2); + $ret .= sprintf('prefs_load(\'%s\', false, false);', json_encode($prefs)); + + if(false) { + if ($user->flags & USER_FLAG_ISOLAUTH) { + $ret .= 'list_set(\'isolation\', false, \''.$mlang_brisk['tit_onisol'][$G_lang].'\' ); '; + } + else if ($user->flags & USER_FLAG_LISTAUTH) { + $ret .= 'list_set(\'auth\', false, \''.$mlang_brisk['tit_onauth'][$G_lang].'\' ); '; + } + else { + $ret .= 'list_set(\'all\', false, \'\' ); '; + } } if ($user->subst == 'standup') @@ -1899,6 +1931,7 @@ class Room } else { fprintf(STDERR, "ROOM FROM FILE\n"); + rename($crystal_filename, $crystal_filename.".old"); } return $room; @@ -2182,7 +2215,7 @@ class Room $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($enc, $new_socket, 20, $header_out, $content); return TRUE; break; @@ -2192,7 +2225,7 @@ class Room $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($enc, $new_socket, 20, $header_out, $content); return TRUE; break; @@ -2205,7 +2238,7 @@ class Room $content = User::stream_fini($transp, $s_a_p->rndstr, TRUE); - $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content); + $s_a_p->pendpage_try_addflush($enc, $new_socket, 20, $header_out, $content); return TRUE; break;