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); }
public HttpResponseMessage Get() { if (HttpContext.Current.IsWebSocketRequest) { var noteHandler = new NoteSocketHandler(); HttpContext.Current.AcceptWebSocketRequest(noteHandler); } return(new HttpResponseMessage(HttpStatusCode.SwitchingProtocols)); }