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);
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
 public override void OnMessage(string message)
 {
     _handler.OnMessage(message);
 }
Example #5
0
        public void OnMessage(IWebSocketContext context, string message, MessageType type)
        {
            var deserializedMessage = serializer.Deserialize <TMessage>(message);

            handler.OnMessage(context, deserializedMessage, type);
        }