コード例 #1
0
ファイル: SocketEngine.php プロジェクト: rburchell/air
 public static function process()
 {
     // if socketClient is in write set, and $socket->connecting === true, set connecting to false and call on_connect
     $read_set = SocketEngine::create_read_set();
     $write_set = SocketEngine::create_write_set();
     $exception_set = SocketEngine::create_exception_set();
     $event_time = time();
     while (($events = socket_select($read_set, $write_set, $exception_set, null)) !== false) {
         AirD::Log(AirD::LOGTYPE_INTERNAL, "Top of main loop.", true);
         if ($events > 0) {
             AirD::Log(AirD::LOGTYPE_INTERNAL, "Processing " . $events . " socket events", true);
             foreach ($read_set as $socket) {
                 AirD::Log(AirD::LOGTYPE_INTERNAL, "Processing a read event for " . (int) $socket, true);
                 SocketEngine::$clients[(int) $socket]->read();
             }
             foreach ($write_set as $socket) {
                 $socket = SocketEngine::get_class($socket);
                 if (is_subclass_of($socket, 'socketClient')) {
                     if ($socket->connecting === true) {
                         $socket->on_connect();
                         $socket->connecting = false;
                     }
                     $socket->do_write(true);
                 }
             }
             foreach ($exception_set as $socket) {
                 $socket = SocketEngine::get_class($socket);
                 if (is_subclass_of($socket, 'socketClient')) {
                     $socket->on_disconnect();
                     if (isset(SocketEngine::$clients[(int) $socket->socket])) {
                         unset(SocketEngine::$clients[(int) $socket->socket]);
                     }
                 }
             }
         }
         if (time() - $event_time > 1) {
             // only do this if more then a second passed, else we'd keep looping this for every bit recieved
             foreach (SocketEngine::$clients as $socket) {
                 $socket->on_timer();
             }
             $event_time = time();
         }
         SocketEngine::clean_sockets();
         $read_set = SocketEngine::create_read_set();
         $write_set = SocketEngine::create_write_set();
         $exception_set = SocketEngine::create_exception_set();
     }
 }