Beispiel #1
0
        /// <summary>
        /// 输出HTTP响应数据
        /// </summary>
        /// <param name="identity">HTTP操作标识</param>
        /// <param name="response">HTTP响应数据</param>
        public override unsafe bool Response(long identity, ref response response)
        {
            if (Interlocked.CompareExchange(ref this.identity, identity + 1, identity) == identity)
            {
                this.response = response;
                response      = null;
                if (this.response.LastModified != null)
                {
                    subArray <byte> ifModifiedSince = RequestHeader.IfModifiedSince;
                    if (ifModifiedSince.length == this.response.LastModified.Length)
                    {
                        fixed(byte *buffer = ifModifiedSince.array)
                        {
                            if (unsafer.memory.Equal(this.response.LastModified, buffer + ifModifiedSince.startIndex, ifModifiedSince.length))
                            {
                                response.Push(ref this.response);
                                this.response = response.NotChanged304;
                            }
                        }
                    }
                }
                if (boundaryReceiver != null)
                {
                    bigBuffers.Push(ref boundaryReceiver.Buffer);
                }
                if (RequestHeader.Method == fastCSharp.web.http.methodType.POST && isLoadForm == 0)
                {
                    switch (RequestHeader.PostType)
                    {
                    case requestHeader.postType.Json:
                    case requestHeader.postType.Form:
                    case requestHeader.postType.Xml:
                    case requestHeader.postType.Data:
                        if (formReceiver == null)
                        {
                            formReceiver = new formIdentityReceiver(this);
                        }
                        formReceiver.Receive(this);
                        return(true);

                    default:
                        if (boundaryReceiver == null)
                        {
                            boundaryReceiver = new boundaryIdentityReceiver(this);
                        }
                        boundaryReceiver.Receive(this);
                        return(true);
                    }
                }
                responseHeader();
                return(true);
            }
            response.Push(ref response);
            return(false);
        }
Beispiel #2
0
        /// <summary>
        /// 获取请求表单数据
        /// </summary>
        /// <param name="identity">HTTP操作标识</param>
        /// <param name="loadForm">HTTP请求表单加载接口</param>
        internal override void GetForm(long identity, requestForm.ILoadForm loadForm)
        {
            if (Interlocked.CompareExchange(ref this.identity, identity + 1, identity) == identity)
            {
                if (isLoadForm == 0)
                {
                    isLoadForm = 1;
                    if (check100Continue())
                    {
                        switch (RequestHeader.PostType)
                        {
                        case requestHeader.postType.Json:
                        case requestHeader.postType.Form:
                        case requestHeader.postType.Xml:
                        case requestHeader.postType.Data:
                            if (formReceiver == null)
                            {
                                formReceiver = new formIdentityReceiver(this);
                            }
                            formReceiver.Receive(loadForm);
                            return;

                        default:
                            if (boundaryReceiver == null)
                            {
                                boundaryReceiver = new boundaryIdentityReceiver(this);
                            }
                            boundaryReceiver.Receive(loadForm);
                            return;
                        }
                    }
                }
                else
                {
                    log.Error.Add("表单已加载", null, true);
                }
            }
            loadForm.OnGetForm(null);
        }