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)); } } } }