public void OnMessage(IWebSocketContext context, byte[] binaryMessage, MessageType type) { string message; using (var stream = new MemoryStream(binaryMessage)) using (var reader = new StreamReader(stream)) message = reader.ReadToEnd(); handler.OnMessage(context, message, type); }
public static async Task ReceiveAsync(this WebSocket ws, IWebSocketHandler handler) { try { while (ws.State == WebSocketState.Open) { var stringResult = new StringBuilder(); WebSocketReceiveResult received; var buffer = new ArraySegment <byte>(new byte[ChunkSize]); var webSocket = ws; do { received = await ws.ReceiveAsync(buffer, CancellationToken.None); switch (received.MessageType) { case WebSocketMessageType.Close: await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); await handler.OnDisconected(webSocket); break; case WebSocketMessageType.Binary: break; case WebSocketMessageType.Text: var data = Encoding.Default.GetString(buffer.Array, buffer.Offset, buffer.Count); stringResult.Append(data.TrimEnd('\0')); break; default: throw new ArgumentOutOfRangeException($"Unknown WebSocket MessageType: {received.MessageType}"); } } while (!received.EndOfMessage); RunInTask(async() => await handler.OnMessage(webSocket, stringResult.ToString())); } } catch (Exception e) { await handler.OnError(e); await handler.OnDisconected(ws); } finally { ws.Dispose(); } }
private async Task HandleConnection(IWebSocketContext context, IWebSocketHandler <byte[]> handler) { var buffer = new byte[1024 * 4]; var webSocket = context.WebSocket; while (webSocket.State == WebSocketState.Open) { var(message, messageType) = await ReceiveMessage(webSocket, buffer); if (messageType == WebSocketMessageType.Close) { continue; } var type = messageType == WebSocketMessageType.Binary ? MessageType.Binary : MessageType.Text; handler.OnMessage(context, message, type); } }
public override void OnMessage(string message) { _handler.OnMessage(message); }
public void OnMessage(IWebSocketContext context, string message, MessageType type) { var deserializedMessage = serializer.Deserialize <TMessage>(message); handler.OnMessage(context, deserializedMessage, type); }