public function acceptClients() { foreach (Events::GetTimedEvents() as $eventIndex => $timedEvent) { list($callable, $interval, $lastCall) = $timedEvent; if ($lastCall === null) { Events::ResetInterval($eventIndex); } elseif (time() - $interval < $lastCall) { continue; } else { call_user_func($callable, $this); Events::ResetInterval($eventIndex); } } $sockets = array_merge(array($this->masterSocket), $this->sockets); $changedSockets = socket_select($sockets, $write, $except, 1); if ($changedSockets === 0) { return false; } else { if (in_array($this->masterSocket, $sockets)) { $clientSocket = $this->accept(); $this->handleAccept($clientSocket); unset($sockets[0]); } foreach ($sockets as $socket) { $mixedStatus = socket_recv($socket, $buffer, 8192, 0); if ($mixedStatus == null) { $this->handleDisconnect($socket); $this->removeClient($socket); continue; } else { $this->handleReceive($socket, $buffer); } } } }
protected function handleReceive($socket, $data) { Events::Fire("receive", [$socket, $data]); $chunkedArray = explode("", $data); array_pop($chunkedArray); foreach ($chunkedArray as $rawData) { Logger::Debug("Received {$rawData}"); $packet = Packet::Parse($rawData); if (Packet::$IsXML) { $this->handleXmlPacket($socket); } else { $this->handleWorldPacket($socket); } } Events::Fire("received", [$socket, $data]); }
public function stopBroadcasting() { if ($this->broadcastingEventIndex !== null) { Events::RemoveInterval($this->broadcastingEventIndex); $this->broadcastingEventIndex = null; } }