コード例 #1
0
        public WebResponseHandler(string scriptPath, ref WebRequestHandler request)
        {
            #region Generating objects for this request
            requestData = new JsonObject();
            m_template  = Template.GetRawTemplate();

            #endregion

            #region Checking request parameters.
            //
            // Just checking some request parameters. This HTTP server
            // doesn't support a lot of things, so we need to send
            // error responses for the things it doesn't support.
            //

            if (request.path == null || request.path.Length <= 0)
            {
                m_template = Templates.Default.BadRequest.GetTemplate(
                    ref request,
                    ref requestData);

                return;
            }

            if (request.connectingHost == null || request.connectingHost.Length <= 0)
            {
                m_template = Templates.Default.BadRequest.GetTemplate(
                    ref request,
                    ref requestData);

                return;
            }

            if (request.mode != "GET" && request.mode != "POST")
            {
                m_template = Templates.Default.BadRequest.GetTemplate(
                    ref request,
                    ref requestData);
                m_template.AppendContent("Unsupported request method");

                return;
            }

            if (request.protocolVersion != "HTTP/1.1" && request.protocolVersion != "HTTP/1.0")
            {
                m_template = Templates.Default.HTTPVersionNotSupported.GetTemplate(
                    ref request,
                    ref requestData);

                return;
            }
            #endregion

            try
            {
                #region Prepend
                m_template = Template.MergeTemplates(
                    m_template,
                    Templates.Custom.Special.Prepend.GetTemplate(
                        ref request,
                        ref requestData));
                #endregion


                switch (scriptPath)
                {
                    #region Action
                case "/action":
                {
                    if (request.mode == "POST")
                    {
                        m_template = Template.MergeTemplates(
                            m_template,
                            Templates.Custom.TemplateAction.GetTemplate(
                                ref request,
                                ref requestData));
                    }
                    else
                    {
                        // Method must be POST. Send an error page.
                        m_template.SetHeader("Content-Type", "text/plain");
                        m_template.AppendContent("Content must be uploaded using the HTTP method POST.");
                        m_template.SetStatus(500, "Internal Server Error");
                    }

                    break;
                }
                    #endregion

                    #region Login
                case "/login":
                {
                    m_template = Template.MergeTemplates(
                        m_template,
                        Templates.Custom.TemplateLogin.GetTemplate(
                            ref request,
                            ref requestData));

                    break;
                }
                    #endregion

                    #region Register
                case "/register":
                {
                    m_template = Template.MergeTemplates(
                        m_template,
                        Templates.Custom.TemplateRegister.GetTemplate(
                            ref request,
                            ref requestData));
                    break;
                }
                    #endregion

                    #region 404
                default:
                {
                    m_template = Template.MergeTemplates(
                        m_template,
                        NotFound.GetTemplate(
                            ref request,
                            ref requestData));
                    break;
                }
                    #endregion
                }


                #region Append
                m_template = Template.MergeTemplates(
                    m_template,
                    Templates.Custom.Special.Append.GetTemplate(
                        ref request,
                        ref requestData));
                #endregion
            }
            catch (Exception ex)
            {
                Logs.LogException(ex.ToString());

                // Don't merge templates for stuff like this
                m_template = InternalServerError.GetTemplate(
                    ref request,
                    ref requestData);
            }
        }