Example #1
0
        /// <summary>
        /// Receive Requests und send response asynchronously (does not block the thread)
        /// </summary>
        public async void HandleRequests()
        {
            _runServer = true;

            while (_runServer)
            {
                //Wait for a request
                var request = await _httpListener.WaitForRequest();

                Log.Debug($"Received a request to '{request.Url}' from {request.UserHostAddress}");

                IResponse response = new Response("", 0);

                try
                {
                    response = _router.ManageRequest(request);

                    if (response.HttpStatusCode == 0)
                    {
                        throw new InvalidDataException("Invalid http status code.");
                    }

                    response.HttpStatusCode = response.HttpStatusCode;
                    Log.Debug($"Request successfully processed");
                }
                catch (BadRequestException ex)
                {
                    Log.Error(ex.Message);
                    response.HttpStatusCode = 400;
                }
                catch (AuthenticationFailedException ex)
                {
                    Log.Error(ex.Message);
                    response.HttpStatusCode = 401;
                }
                catch (UnauthorizedAccessException ex)
                {
                    Log.Error(ex.Message);
                    response.HttpStatusCode = 403;
                }
                catch (DatabaseNotFoundException ex)
                {
                    Log.Error(ex.Message);;
                    response.HttpStatusCode = 404;
                }
                catch (RouteNotFoundException ex)
                {
                    Log.Error(ex.Message);;
                    response.HttpStatusCode = 404;
                }
                catch (ResourceNotFoundException ex)
                {
                    Log.Error(ex.Message);;
                    response.HttpStatusCode = 404;
                }
                catch (MethodNotAllowedException ex)
                {
                    Log.Error(ex.Message);;
                    response.HttpStatusCode = 405;
                }
                catch (DatabaseTypeNotFoundException ex)
                {
                    Log.Error(ex.Message);;
                    response.HttpStatusCode = 422;
                }

                _httpListener.WriteResponse(request, response);
                Log.Debug("Response sent");
            }
        }