private void acceptRequestAsync(HttpListenerContext context)
        {
            ThreadPool.QueueUserWorkItem(
                state => {
                try {
                    var authScheme = _listener.SelectAuthenticationScheme(context);
                    if (authScheme != AuthenticationSchemes.Anonymous &&
                        !authenticateRequest(authScheme, context))
                    {
                        return;
                    }

                    if (context.Request.IsUpgradeTo("websocket"))
                    {
                        acceptWebSocketRequest(context.AcceptWebSocket(_logger));
                        return;
                    }

                    acceptHttpRequest(context);
                    context.Response.Close();
                }
                catch (Exception ex) {
                    _logger.Fatal(ex.ToString());
                    context.Connection.Close(true);
                }
            });
        }
Exemplo n.º 2
0
        private void receiveRequest()
        {
            while (true)
            {
                try {
                    var ctx = _listener.GetContext();
                    ThreadPool.QueueUserWorkItem(
                        state => {
                        try {
                            var schm = _listener.SelectAuthenticationScheme(ctx);
                            if (schm != AuthenticationSchemes.Anonymous &&
                                !authenticateRequest(schm, ctx))
                            {
                                return;
                            }

                            if (ctx.Request.IsUpgradeTo("websocket"))
                            {
                                processWebSocketRequest(ctx.AcceptWebSocket(null, _logger));
                                return;
                            }

                            processHttpRequest(ctx);
                        }
                        catch (Exception ex) {
                            _logger.Fatal(ex.ToString());
                            ctx.Connection.Close(true);
                        }
                    });
                }
                catch (HttpListenerException ex) {
                    _logger.Warn("Receiving has been stopped.\nreason: " + ex.Message);
                    break;
                }
                catch (Exception ex) {
                    _logger.Fatal(ex.ToString());
                    break;
                }
            }

            if (IsListening)
            {
                abort();
            }
        }