= $config['timeout']) break; } else { $timeout = 0; } processClients(); if($bot != null){ // $bot handles the sleep time here $bot->Process(); } else { usleep(5000); } } // We've quit, lower the counter for this host if($config['memcache_use']){ @GLOB::$mc->decrement($host_key); } deb('Exiting client'); ############################################ ## Functions / Classes ############################################ function processClients(){ global $ipc_srv; global $ipc; global $ipc_read; global $buffer; global $timeout; // Check for any new web client connections... $read = array($ipc_srv); $write = $excep = array(); $read_changed = stream_select($read, $write, $excep, 0); for($i=0; $i<$read_changed; $i++) { if($read[$i] === $ipc_srv){ $ipc[] = stream_socket_accept($ipc_srv); deb("Connection..."); } } // Check for any changed web clients.. $read = $ipc; $read_changed = (count($read)) ? stream_select($read, $write, $excep, 0) : array(); if($read_changed){ foreach($read as $cl){ $data = fread($cl, 1024); if(!$data){ // Web client has disconnected deb("Removing closed socket.."); $key = array_search($cl, $ipc); unset($ipc[$key]); $key = array_search($cl, $ipc_read); if($key !== false) unset($ipc_read[$key]); } else { //deb('Got data: '.$data); processClientMessage($data, $cl); } } } // Send the buffer messages to any connected web clients.. // 1 message at a time... if(count($buffer) && count($ipc_read)){ //deb(print_r($ipc_read, 1)); $msg = array_shift($buffer); //deb("Sending '$msg' to ".count($ipc_read)." clients.."); foreach($ipc_read as $cl){ if($cl) fwrite($cl, $msg."\n"); } } // The whole buffer at a time... /* while(count($buffer)){ $msg = array_shift($buffer); foreach($ipc as $cl) frwite($cl, $msg); } */ } function processClientMessage($data, $cl){ global $config; global $buffer; global $bot, $ipc_read; global $timeout; global $send_debug; global $app_args; require('dev_processClientMessage.php'); return true; } function errorHandler($errno, $errstr, $errfile, $errline){ $ret = ''; switch ($errno) { case E_USER_ERROR: $ret .= "USER [$errno] $errstr\n"; $ret .= " Fatal error on line $errline in file $errfile"; $ret .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n"; $ret .= "Aborting...
\n"; exit(1); break; case E_USER_WARNING: $ret .= "WARNING on line $errline in file $errfile: [$errno] $errstr\n"; break; case E_USER_NOTICE: $ret .= "NOTICE on line $errline in file $errfile: [$errno] $errstr\n"; break; default: $ret .= "UNKOWN ERR on line $errline in file $errfile: [$errno] $errstr\n"; break; } if(!empty($ret)) deb($ret); /* Don't execute PHP internal error handler */ return true; }