private void DoWebSocketUpgrade(IDictionary <string, object> acceptOptions, WebSocketFunc callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("callback");
            }

            _environment[Constants.ResponseStatusCodeKey] = 101;
            _acceptOptions = acceptOptions;
            _webSocketFunc = callback;

            string subProtocol = GetWebSocketSubProtocol();

            PrepareResponse();

            // TODO: Other parameters?
            _webSocketAction = _context.AcceptWebSocketAsync(subProtocol)
                               .Then(webSocketContext =>
            {
                var wrapper = new WebSockets.OwinWebSocketWrapper(webSocketContext,
                                                                  _environment.Get <CancellationToken>(Constants.CallCancelledKey));
                return(_webSocketFunc(wrapper.Environment)
                       .Then(() => wrapper.CleanupAsync()));
            });
        }
Beispiel #2
0
        private async Task WebSocketUpgrade(string subProtocol, int receiveBufferSize, TimeSpan keepAliveInterval, ArraySegment <byte>?internalBuffer)
        {
            HttpListenerWebSocketContext context;

            if (!internalBuffer.HasValue)
            {
                context = await _context.AcceptWebSocketAsync(subProtocol, receiveBufferSize, keepAliveInterval);
            }
            else
            {
                context = await _context.AcceptWebSocketAsync(subProtocol, receiveBufferSize, keepAliveInterval, internalBuffer.Value);
            }

            var wrapper = new WebSockets.OwinWebSocketWrapper(context, _environment.Get <CancellationToken>(Constants.CallCancelledKey));

            await _webSocketFunc(wrapper.Environment);

            await wrapper.CleanupAsync();
        }