public HelloWorld() : base("HelloWorld", new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8080), new Method[] { Method.GET, Method.HEAD }, Path.Combine(Directory.GetCurrentDirectory(), "log"), "/HTTP") { Sessions = new WebApp.SessionStores.MemoryStore(); BasicServer.Response render(string text, string ct = "text/plain") { var headers = BasicServer.DefaultHeaders(); headers["Content-Type"] = ct; return(new BasicServer.Response() { Status = StatusCode.OK, Body = Encoding.UTF8.GetBytes(text), Headers = headers, }); } BasicServer.Response count(AdvancedServer.Request request) { var response_headers = BasicServer.DefaultHeaders(); WebApp.SessionStores.DictionarySession session; if (!request.Headers.Cookie.HasValue) { session = Sessions.Create(); response_headers["Set-Cookie"] = $"id={session.ID}"; } else { var cookie_str = request.Headers.Cookie.Value; var tok = cookie_str.Trim().Split(' ').Where(str => str.StartsWith("id=")).Select(s => s.TrimEnd(';')).Last(); var id = tok.Substring(3); if (!Sessions.HasSession(id)) { session = Sessions.Create(); response_headers["Set-Cookie"] = $"id={session.ID}"; } else { session = Sessions.Open(id); } } int hit_count; if (!session.HasKey("count")) { hit_count = 0; } else { hit_count = int.Parse(session["count"]); } session["count"] = $"{++hit_count}"; var response_text = $"count: {hit_count}"; return(new BasicServer.Response() { Status = StatusCode.OK, Headers = response_headers, Body = Encoding.UTF8.GetBytes(response_text), }); } Router.GET("/", (r => render("Hello, world!"))); Router.GET("/test", (r => render("test successful"))); Router.GET("/name/$name", (r, vars) => render($"hello, {vars["name"]}!")); Router.GET("/doublename/$name", (r, vars) => render($"{vars["name"]}{vars["name"]}")); Router.HEAD("/", (r => render("Hello, world!"))); Router.HEAD("/test", (r => render("test successful"))); Router.HEAD("/name/$name", (r, vars) => render($"hello, {vars["name"]}!")); Router.HEAD("/doublename/$name", (r, vars) => render($"{vars["name"]}{vars["name"]}")); //Router.GET("/foo/$bar/baz/$bar", r => render_plaintext("this shouldn't work!")); Router.GET("/count", count); Router.GET("/count/reset", request => { if (!request.Headers.Cookie.HasValue) { return(Server.RenderServerError(StatusCode.BAD_REQUEST)); } var cookie_str = request.Headers.Cookie.Value; var tok = cookie_str.Trim().Split(' ').Where(str => str.StartsWith("id=")).Select(s => s.TrimEnd(';')).Last(); var id = tok.Substring(3); if (Sessions.HasSession(id)) { Sessions.Destroy(Sessions.Open(id)); } var redirect = Redirect("/HTTP/count"); redirect.Headers["Set-Cookie"] = "id="; return(redirect); }); var assetsdir = Path.Combine(Directory.GetCurrentDirectory(), "assets"); if (Directory.Exists(assetsdir)) { AssetServer.Register(assetsdir, Router, "/assets", true); } var viewsdir = Path.Combine(Directory.GetCurrentDirectory(), "views"); if (Directory.Exists(viewsdir)) { Views = new TemplateEngine(viewsdir); var name_template = Views.Load("name.html.template"); Router.GET("/rendername/$name", (r, vars) => render(name_template.With(vars), "text/html")); } }