diff --git a/src/Servers/SimpleWServer/Program.cs b/src/Servers/SimpleWServer/Program.cs index 80e8340..aebabc3 100644 --- a/src/Servers/SimpleWServer/Program.cs +++ b/src/Servers/SimpleWServer/Program.cs @@ -1,51 +1,46 @@ using System.Net; using SimpleW; +using SimpleW.Observability; -var port = args.Length > 0 && int.TryParse(args[0], out var p) ? p : 8080; +// logs +Log.SetSink(Log.ConsoleWriteLine, LogLevel.Trace); +var port = args.Length > 0 && int.TryParse(args[0], out var p) ? p : 8080; var server = new SimpleWServer(IPAddress.Any, port); +// default +server.MapGet("/", () => "OK"); +server.Map("HEAD", "/", () => "OK"); +server.Map("OPTIONS", "/", (HttpSession session) => { + return session.Response.AddHeader("Allow", "GET, HEAD, POST, OPTIONS") + .Text("OK"); +}); + +// post +server.MapPost("/", (HttpSession session) => session.Response.Text(session.Request.BodyString)); + +// echo +server.MapGet("/echo", (HttpSession session) => Echo(session)); +server.MapPost("/echo", (HttpSession session) => Echo(session)); +// cookie server.MapGet("/cookie", (HttpSession session) => ParseCookies(session)); server.MapPost("/cookie", (HttpSession session) => ParseCookies(session)); -server.MapGet("/echo", (HttpSession session) => -{ - var sb = new System.Text.StringBuilder(); - foreach (var h in session.Request.Headers.EnumerateAll()) - sb.AppendLine($"{h.Key}: {h.Value}"); - return sb.ToString(); -}); -server.MapPost("/echo", (HttpSession session) => -{ + +static HttpResponse Echo(HttpSession session) { var sb = new System.Text.StringBuilder(); - foreach (var h in session.Request.Headers.EnumerateAll()) + foreach (var h in session.Request.Headers.EnumerateAll()) { sb.AppendLine($"{h.Key}: {h.Value}"); - return sb.ToString(); -}); -server.MapGet("/", () => "OK"); -server.MapGet("/{path}", () => "OK"); -server.MapPost("/", (HttpSession session) => session.Request.BodyString); -server.MapPost("/{path}", (HttpSession session) => session.Request.BodyString); + } + return session.Response.Text(sb.ToString()); +} -static string ParseCookies(HttpSession session) -{ +static HttpResponse ParseCookies(HttpSession session) { var sb = new System.Text.StringBuilder(); - foreach (var h in session.Request.Headers.EnumerateAll()) - { - if (string.Equals(h.Key, "Cookie", StringComparison.OrdinalIgnoreCase)) - { - foreach (var pair in h.Value.Split(';')) - { - var trimmed = pair.TrimStart(); - var eqIdx = trimmed.IndexOf('='); - if (eqIdx > 0) - sb.AppendLine($"{trimmed[..eqIdx]}={trimmed[(eqIdx + 1)..]}"); - } - } + foreach (var pair in session.Request.Headers.EnumerateCookies()) { + sb.AppendLine($"{pair.Key}={pair.Value}"); } - return sb.ToString(); + return session.Response.Text(sb.ToString()); } -Console.WriteLine($"SimpleW listening on http://localhost:{port}"); - await server.RunAsync(); diff --git a/src/Servers/SimpleWServer/SimpleWServer.csproj b/src/Servers/SimpleWServer/SimpleWServer.csproj index 7c5e806..aaa9179 100644 --- a/src/Servers/SimpleWServer/SimpleWServer.csproj +++ b/src/Servers/SimpleWServer/SimpleWServer.csproj @@ -7,7 +7,7 @@ - +