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