private async Task AcceptCallback(AspNetWebSocketContext webSocketContext) { OwinWebSocketWrapper wrapper = null; try { wrapper = new OwinWebSocketWrapper(webSocketContext); await _webSocketFunc(wrapper.Environment); // Making sure to close the web socket is not necessary, Asp.Net will do this for us. wrapper.Dispose(); } catch (Exception ex) { if (wrapper != null) { wrapper.Cancel(); wrapper.Dispose(); } // traced as warning here because it is re-thrown Trace.WriteWarning(Resources.Trace_WebSocketException, ex); throw; } }
private async Task WebSocketUpgrade(string subProtocol, int receiveBufferSize, TimeSpan keepAliveInterval, ArraySegment <byte>?internalBuffer) { var context = await _context.AcceptWebSocketAsync(subProtocol, receiveBufferSize, keepAliveInterval); var wrapper = new OwinWebSocketWrapper(context, _environment.Get <CancellationToken>(Constants.CallCancelledKey)); await _webSocketFunc(wrapper.Environment); await wrapper.CleanupAsync(); }
private async Task HandleSocket(OwinWebSocketWrapper webSocket, ArraySegment <byte> receivedDataBuffer, CancellationToken cancellationToken, MemoryStream memoryStream) { //Checks WebSocket state. while (webSocket.State == WebSocketState.Open) { await ReadMessage(webSocket, receivedDataBuffer, memoryStream); memoryStream.Position = 0; //Sends data back. await webSocket.SendAsync(new ArraySegment <byte>(memoryStream.ToArray()), WebSocketMessageType.Text, true, cancellationToken); memoryStream.Position = 0; memoryStream.SetLength(0); } }
//Asynchronous request handler. public async Task OnAccept(IDictionary <string, object> websocketContext, IOwinContext context) { //Gets the current WebSocket object. OwinWebSocketWrapper webSocket = new OwinWebSocketWrapper(websocketContext); /*We define a certain constant which will represent * size of received data. It is established by us and * we can set any value. We know that in this case the size of the sent * data is very small. */ const int maxMessageSize = 1024; //Buffer for received bits. var receivedDataBuffer = new ArraySegment <Byte>(new Byte[maxMessageSize]); MemoryStream memoryStream = new MemoryStream(); var cancellationToken = CancellationToken.None; await Task.Run(() => HandleSocket(webSocket, receivedDataBuffer, cancellationToken, memoryStream)); }