private function readLine(&$identifier)
 {
     foreach ($this->sockets as $identifier => $sk) {
         $line = socket_read($sk, 512, PHP_NORMAL_READ);
         if ($line) {
             return $line;
         } elseif (($err = socket_last_error($sk)) >= SOCKET_ENOTSOCK) {
             socket_write($sk, "ERROR :Read error: " . socket_strerror($err) . "\r\n");
             socket_close($sk);
             $this->buffer->addRead(chr(IRCLine::SIGNAL_CLOSE_SESSION) . $identifier);
         }
     }
     return false;
 }
 public function tick()
 {
     while ($this->buffer->hasMoreRead()) {
         $line = IRCLine::parseInternalLine($this->buffer->nextRead(), $signal, $client);
         switch ($signal) {
             case IRCLine::SIGNAL_OPEN_SESSION:
                 $this->sessions[$line] = new IRCSession($line, $this->main);
                 break;
             case IRCLine::SIGNAL_CLOSE_SESSION:
                 if (isset($this->sessions[$line])) {
                     $this->sessions[$line]->finalize();
                     unset($this->sessions[$line]);
                 }
                 break;
             case IRCLine::SIGNAL_STD_LINE:
                 if (isset($this->sessions[$client])) {
                     $this->sessions[$client]->handleLine(new IRCLine($line));
                 }
         }
     }
 }