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();
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
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));
        }