Ejemplo n.º 1
0
        private async Task ProcessSocketConnection(IDictionary <string, object> wsEnv)
        {
            var wsSendAsync     = (WebSocketSendAsync)wsEnv["websocket.SendAsync"];
            var wsCloseAsync    = (WebSocketCloseAsync)wsEnv["websocket.CloseAsync"];
            var wsCallCancelled = (CancellationToken)wsEnv["websocket.CallCancelled"];
            var wsRecieveAsync  = (WebSocketReceiveAsync)wsEnv["websocket.ReceiveAsync"];

            //pass the sendasync tuple and the cancellation token to the handler. The handler uses the sendasync method to send message. Each connected client has access to this
            var handler = new NoteSocketHandler(wsSendAsync, CancellationToken.None);

            handler.OnOpen();
            var buffer = new ArraySegment <byte>(new byte[100]);

            try {
                object status;
                while (!wsEnv.TryGetValue("websocket.ClientCloseStatus", out status) || (int)status == 0)
                {
                    WebSocketReceiveResult webSocketResultTuple = await wsRecieveAsync(buffer, CancellationToken.None);

                    int count = webSocketResultTuple.Item3;

                    handler.OnMessage(Encoding.UTF8.GetString(buffer.Array, 0, count));
                }
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
                throw ex;
            }
            handler.OnClose();
            await wsCloseAsync((int)WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
        }
Ejemplo n.º 2
0
        public HttpResponseMessage Get()
        {
            if (HttpContext.Current.IsWebSocketRequest)
            {
                var noteHandler = new NoteSocketHandler();
                HttpContext.Current.AcceptWebSocketRequest(noteHandler);
            }

            return(new HttpResponseMessage(HttpStatusCode.SwitchingProtocols));
        }