private void WebSocket_DataReceived(object sender, WebSocketDataEventArgs e) { OnRawPacketReceived(e.Data); var packet = new Packet(e.Data); if (packet.Type == PacketType.SetupPacket) { var setupPacket = packet.As <SetupPacket>(); SetUpConnectionDetails(setupPacket.Data); } else if (packet.Type == PacketType.EventPacket) { var eventPacket = packet.As <EventPacket>(); Dispatcher.Dispatch(eventPacket.Event); } }
private void WebSocket_DataSent(object sender, WebSocketDataEventArgs e) => OnRawPacketSent(e.Data);
/// <summary> /// The onClientMessage /// </summary> /// <param name="sender">The sender<see cref="WebSocketClient"/></param> /// <param name="e">The e<see cref="WebSocketDataEventArgs"/></param> private void onClientMessage(WebSocketClient sender, WebSocketDataEventArgs e) { /* * Parse message as described in * https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_server#collapse-3 */ var byte1 = e.Data[0]; // should be 129 for text var received = getBytesBit(byte1); var opCode = convertBitArrayToNumber(new[] { received[4], received[5], received[6], received[7] }); #if FULL_LOG Console.WriteLine($"{received[0]} - FIN"); Console.WriteLine($"{received[1]} - RSV1"); Console.WriteLine($"{received[2]} - RSV2"); Console.WriteLine($"{received[3]} - RSV3"); Console.WriteLine($"{opCode} - Opcode"); #endif try { switch (opCode) { case 0x0: Console.WriteLine($"Received unmanaged `binary` from client {sender.RemoteEndPoint}"); break; // denotes a continuation frame case 0x1: // denotes a text frame Console.WriteLine($"Received `text` from client {sender.RemoteEndPoint}"); manageTextReceived(sender, e.Data); break; case 0x2: break; // reserved for further non-control frames case 0x3: break; case 0x4: break; case 0x5: break; case 0x6: break; case 0x7: break; case 0x8: Console.WriteLine($"Received `close connection` from client {sender.RemoteEndPoint}"); sender.Dispose(); break; // denotes a connection close case 0x9: Console.WriteLine($"Received `ping` from client {sender.RemoteEndPoint}, send `pong`"); SendPong(sender); break; // denotes a ping case 0xA: Console.WriteLine($"Received `pong` from client {sender.RemoteEndPoint}, it's alive"); break; // denotes a pong case 0xB: break; //reserved for further control frames case 0xC: break; case 0xD: break; case 0xE: break; case 0xF: break; default: Console.WriteLine($"Received unknown opcode `{opCode}`. Close connection."); sender.Dispose(); break; } } catch (Exception) { sender.Dispose(); } }