コード例 #1
0
ファイル: WebServer.cs プロジェクト: timyaukey/NetServer
        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);
        }
コード例 #2
0
        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");
            }
        }