Example #1
0
 protected function onData($data, $id)
 {
     global $arConfig;
     if (!$this->usermgr->GetUser($id)) {
         $this->usermgr->AddUser($id);
     }
     if (!$this->usermgr->GetUser($id)->IsWebsocketInited()) {
         $headers = HttpUtils::ParseHeaders($data);
         $hash = base64_encode(pack('H*', sha1($headers['Sec-WebSocket-Key'] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
         $answer = "HTTP/1.1 101 Switching Protocols\r\n" . "Upgrade: websocket\r\n" . "Connection: Upgrade\r\n" . "Sec-WebSocket-Accept: " . $hash . "\r\n\r\n";
         $this->Send($answer, $id);
         $this->usermgr->GetUser($id)->InitWebSocketConnection();
     } else {
         $decoded_data = $this->decode($data);
         Logger::getInstance()->outDebug("WebSocket: Receive data: " . var_export($decoded_data, true));
         switch ($decoded_data['type']) {
             case 'text':
                 $data = json_decode($decoded_data['payload']);
                 $handlerName = $data->{'opcode'};
                 if (method_exists('PacketHandler', $handlerName)) {
                     PacketHandler::$handlerName($data->{'data'}, $id, $this);
                 } else {
                     Logger::getInstance()->outError("Websocket: Got unknown packet: " . $handlerName);
                     $packet = array('opcode' => 'smsg_error', 'data' => array('message' => 'received unknown packet'));
                     $this->Send($packet, $id);
                 }
                 break;
             case 'close':
                 $this->Close($id);
                 break;
         }
     }
 }