public void Add(string hostName, int port, IWebSiteExecutor site) { WebPortListener listener; if (!_Listeners.TryGetValue(port, out listener)) { listener = new WebPortListener(port); listener.DiagOutput = DiagOutput; listener.Start(); _Listeners.Add(port, listener); } listener.Add(hostName, site); }
public void ExecuteRequest(WebRequest request, WebResponse response, WebPortListener server) { WebSessionContainer <TSession> sessionContainer = _SiteData.GetSessionContainer(request, response); TSession session = sessionContainer.Session; WebContext <TSiteData, TSession> context = new WebContext <TSiteData, TSession>(request, response, server, new SiteUtilities(_SiteRoot), _SiteData, session); server.WriteDiagMessage(context.Request.Verb + " " + context.Request.RequestURI); IWebPageFactory <TSiteData, TSession> matchingHandler = null; foreach (IWebPageHandler <TSiteData, TSession> handler in _WebPageHandlers) { if (handler.IsMatch(context.Request.AbsoluteUriPath)) { matchingHandler = handler.Factory; break; } } if (matchingHandler == null) { throw new WebExceptions.ResourceNotFound(request.RequestURI); } switch (context.Request.Verb) { case HttpVerbs.Get: WebPage <TSiteData, TSession> getPage = matchingHandler.GetInstance(context); getPage.Process(context); response.FlushBody(server); break; case HttpVerbs.Head: WebPage <TSiteData, TSession> headPage = matchingHandler.GetInstance(context); headPage.Process(context); break; case HttpVerbs.Post: WebPage <TSiteData, TSession> postPage = matchingHandler.GetInstance(context); postPage.Process(context); response.FlushBody(server); break; default: throw new WebExceptions.NotImplemented("Verb " + context.Request.Verb + " not supported"); } }