private async Task <ITransport> AcceptWebSocketAsync(HttpListenerContext httpListenerContext) { try { if (!httpListenerContext.Request.IsWebSocketRequest) { httpListenerContext.Response.StatusCode = 400; httpListenerContext.Response.Close(); return(null); } var context = await httpListenerContext.AcceptWebSocketAsync( LimeUri.LIME_URI_SCHEME, _bufferSize, _keepAliveInterval) .WithCancellation(_acceptTransportCts.Token) .ConfigureAwait(false); return(new ServerWebSocketTransport(context, _envelopeSerializer, _traceWriter, _bufferSize)); } catch (OperationCanceledException) when(_acceptTransportCts.IsCancellationRequested) { } catch (Exception ex) { ListenerException.RaiseEvent(this, new ExceptionEventArgs(ex)); } return(null); }
private async Task AcceptTransportsAsync() { while (!_acceptTransportCts.IsCancellationRequested) { try { var httpContext = await _httpListener .GetContextAsync() .WithCancellation(_acceptTransportCts.Token) .ConfigureAwait(false); await _httpListenerContextBufferBlock .SendAsync(httpContext, _acceptTransportCts.Token) .ConfigureAwait(false); } catch (OperationCanceledException) when(_acceptTransportCts.IsCancellationRequested) { break; } catch (Exception ex) { var args = new ExceptionEventArgs(ex); ListenerException.RaiseEvent(this, new ExceptionEventArgs(ex)); await args.WaitForDeferralsAsync(); } } }