private function receive($socket) { $client = Client::getBySocket($socket); if (!$client) { return; } $bytes = @socket_recv($socket, $buffer, self::SOCKET_READ, 0); if (!$client->identified) { // Client needs to perform handshake before transmission can begin $client->handshake($buffer) ? $this->trigger('client:handshake', array($this, $client)) : $this->disconnect($client); } else { // Client sends a new packet to server $packet = new Packet($bytes, $buffer, $client->version); switch ($packet->opcode) { case Packet::OPCODE_CLOSE: $this->disconnect($client); break; case Packet::OPCODE_PING: $client->send($packet->utf8, Packet::OPCODE_PONG); $this->trigger('client:ping', array($this, $client, $packet->utf8)); break; case Packet::OPCODE_TEXT: $this->trigger('client:message', array($this, $client, $packet->utf8)); break; case Packet::OPCODE_DATA: $this->trigger('client:message', array($this, $client, $packet->utf8)); } } }