Example #1
0
 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));
         }
     }
 }