internal RequestContext(HttpListenerContext originalContext, TemplateProvider templateProvider, DbConnectionFactory dbConnectionFactory) { _originalContext = originalContext; Request = new HttpRequest(_originalContext.Request); _templateProvider = templateProvider; Response = new HttpResponse(_originalContext.Response, this, templateProvider); _dbConnectionFactory = dbConnectionFactory; }
private static void ProcessRequest(HttpListener listener, TemplateProvider templateProvider, Router router, Options options, DbConnectionFactory dbConnectionFactory) { HttpListenerContext originalContext = listener.GetContext(); HttpListenerResponse originalResponse = originalContext.Response; RequestContext context = new RequestContext(originalContext, templateProvider, dbConnectionFactory); Stream output = originalResponse.OutputStream; try { Before(context); router.RouteRequestToMethod(context); SendResponse(context, originalResponse, output); } catch (Exception e) { originalResponse.StatusCode = 500; if (options.DisplayExceptions) { byte[] buffer = Encoding.UTF8.GetBytes(e.ToString()); originalResponse.ContentLength64 = buffer.Length; output.Write(buffer, 0, buffer.Length); } Logger.Error(e); } finally { context.Dispose(); output.Close(); } }
private static int Main(string[] args) { string configFilePath = "config.yml"; if (args.Length >= 1) { configFilePath = args[0]; } Options options = ReadOptionsFile(configFilePath); Console.WriteLine(options); Console.WriteLine("Initializing TemplateProvider..."); TemplateProvider templateProvider = new TemplateProvider( options.TemplatesDirectory, options.ReloadTemplates ); Console.WriteLine("Initialized TemplateProvider."); DbConnectionFactory dbConnectionFactory = new DbConnectionFactory(options.PostgresConnectionString); HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://*:8080/"); listener.Start(); Console.WriteLine("Server started."); Router router = new Router(); router.AddGetRoute(@"^/blog(\?.*|$)", BlogController.Get); router.AddPostRoute(@"^/blog(\?.*|$)", BlogController.Post); while (true) { ProcessRequest(listener, templateProvider, router, options, dbConnectionFactory); } }
public TemplateLoader(TemplateProvider templateProvider) { _templateProvider = templateProvider; }
public HttpResponse(HttpListenerResponse response, RequestContext context, TemplateProvider templateProvider) { _response = response; _templateProvider = templateProvider; _context = context; }