private static void ProcessRequest(EndpointHandler endpointHandler, EndpointHandlerRegister handlerRegister, TcpClient client) { try { NetworkStream requestStream = client.GetStream(); Console.WriteLine($"Nachricht erhalten um: {DateTime.Now} Client: {client.Client.RemoteEndPoint}"); Console.WriteLine("-----------------------------------------------------------------------------"); HttpRequestParser requestParser = new HttpRequestParser(); RequestContext context; context = requestParser.ParseRequestStream(requestStream); Console.WriteLine("-----------------------------------------------------------------------------"); Console.WriteLine(); RouteMatch match = handlerRegister.GetEndPointHandler(context); if (match != null) { IActionResult result = endpointHandler.Invoke(match, client, context); result.Execute(); } else { HttpStatusCodeResult.NotFound(client) .Execute(); } client.Close(); } catch (HttpRequestParserException parserEx) { string parseErrorMessage = $"Ungültiger Request, parsen nicht möglich: {parserEx.Message}"; Console.WriteLine(parseErrorMessage); HttpStatusCodeResult.BadRequest(client, parseErrorMessage) .Execute(); } catch (Exception ex) when(ex is EndPointHandlerException || ex is EndpointHandlerRegisterException) { HttpStatusCodeResult.BadRequest(client, ex.GetFullMessage(verbose: true)) .Execute(); } catch (Exception ex) { Console.WriteLine($"Unerwarteter Fehler: {ex.Message}"); HttpStatusCodeResult.InternalServerError(client) .Execute(); } finally { client.Close(); } }
private void ExecuteWebServer() { TcpListener listener = new TcpListener(Address, Port); Console.WriteLine($"Starte WebServer auf {Address}:{Port}."); EndpointHandler endpointHandler = new EndpointHandler(ServiceProvider); EndpointHandlerRegister handlerRegister = new EndpointHandlerRegister(HandlerTypes); try { listener.Start(); } catch (Exception ex) { Console.WriteLine($"Error starting TcpListener: {ex.Message}"); return; } Console.WriteLine("Webserver wurde erfolgreich gestartet."); try { while (true) { TcpClient client = listener.AcceptTcpClient(); Task.Run(() => ProcessRequest(endpointHandler, handlerRegister, client)); } } catch (Exception ex) { Console.WriteLine($"Error AcceptClient: {ex.Message}"); } finally { listener.Stop(); } }