protected void ProcessMessage(WebSocketClient client, IEnumerable <WebSocketFrame> messages) { if (messages is null) { return; } foreach (var message in messages) { switch (message.Code) { case WebSocketFrame.OpCode.ContinuationFrame: break; case WebSocketFrame.OpCode.TextFrame: if (message.Data.Length > 0) { Task.Run(() => MessageReceived?.Invoke(this, new MessageReceivedArgs() { Client = client, Message = Encoding.UTF8.GetString(message.Data) })); } break; case WebSocketFrame.OpCode.BinaryFrame: break; case WebSocketFrame.OpCode.ConnectionClose: client.Dispose(); Clients.Remove(client); Console.WriteLine("Client " + client.Id + " closing..."); break; case WebSocketFrame.OpCode.Ping: client.Send(new WebSocketFrame() { Code = WebSocketFrame.OpCode.Pong }); break; case WebSocketFrame.OpCode.Pong: Console.WriteLine("Pong received."); break; default: Console.WriteLine("Not supported command."); break; } } }
private void ProcessConnection(WebSocketClient client) { try { client.UpgradedConnection = ProcessWebsocketUpgrade(client); } catch (Exception ex) { Console.WriteLine(ex.Message); client?.Dispose(); Clients.Remove(client); return; } if (client.UpgradedConnection) { Task .Delay(ClientUpgradeTimeout) .ContinueWith(t => OnClientConnected(client)); } }