예제 #1
0
        ///// <summary>
        ///// 获取请求表单数据[TRY+1]
        ///// </summary>
        ///// <param name="identity">HTTP操作标识</param>
        ///// <param name="page">WEB 页面</param>
        ///// <param name="type">获取请求表单数据回调类型</param>
        ///// <returns>是否匹配会话标识</returns>
        //internal override bool GetForm(long identity, AutoCSer.WebView.Page page, GetFormType type)
        //{
        //    if (Interlocked.CompareExchange(ref this.Identity, identity + 1, identity) == identity)
        //    {
        //        GetFormPage = page;
        //        GetFormType = type;
        //        tryGetForm();
        //        return true;
        //    }
        //    return false;
        //}
        /// <summary>
        /// 获取请求表单数据
        /// </summary>
        /// <param name="page">WEB 页面</param>
        /// <param name="type">获取请求表单数据回调类型</param>
        internal override void GetForm(AutoCSer.WebView.Page page, GetFormType type)
        {
            ++this.Identity;
            GetFormPage = page;
            GetFormType = type;

            Flag |= SocketFlag.GetForm | SocketFlag.IsLoadForm;
            try
            {
                if (Header.Is100Continue == 0)
                {
                    if (getForm()) return;
                }
                else
                {
                    System.Net.Sockets.Socket socket = Socket;
                    if (socket != null)
                    {
                        SendType = SendType.GetForm;
                        Data.Set(continue100, 0, continue100.Length);
                        Timeout = Config.GetTimeout(Data.Length);
#if DOTNET2
                            SocketError socketError;
                            IAsyncResult async = socket.BeginSend(continue100, 0, Data.Length, SocketFlags.None, out socketError, onSendAsyncCallback, socket);
                            if (socketError == SocketError.Success)
                            {
                                if (!async.CompletedSynchronously) Http.Header.ReceiveTimeout.Push(this, socket);
                                return;
                            }
#else
                        sendAsyncLock.EnterSleepFlag();
                        sendAsyncEventArgs.SetBuffer(continue100, 0, Data.Length);
                        if (socket.SendAsync(sendAsyncEventArgs))
                        {
                            sendAsyncLock.SleepFlag = 0;
                            Http.Header.ReceiveTimeout.Push(this, socket);
                            sendAsyncLock.Exit();
                            return;
                        }
                        sendAsyncLock.ExitSleepFlag();
                        if (sendAsyncEventArgs.SocketError == SocketError.Success && sendAsyncEventArgs.BytesTransferred == Data.Length && getForm()) return;
#endif
                    }
                }
            }
            catch (Exception error)
            {
                Server.RegisterServer.TcpServer.Log.Exception(error, null, LogLevel.Exception | LogLevel.AutoCSer);
            }
            HeaderError();
        }
예제 #2
0
        /// <summary>
        /// 获取请求表单数据回调处理
        /// </summary>
        /// <returns></returns>
        internal bool OnGetForm()
        {
            AutoCSer.WebView.Page page = GetFormPage;
            Flag       &= SocketFlag.All ^ SocketFlag.GetForm;
            GetFormPage = null;
            ++page.SocketIdentity;
            switch (GetFormType)
            {
            case Http.GetFormType.Call:
                if (page.DomainServer.Call(new AutoCSer.WebView.UnionType {
                    Value = page
                }.CallSynchronize))
                {
                    return(true);
                }
                break;

            case Http.GetFormType.CallAsynchronous:
                if (page.DomainServer.Call(new AutoCSer.WebView.UnionType {
                    Value = page
                }.CallAsynchronousBase))
                {
                    return(true);
                }
                break;

            case Http.GetFormType.Ajax:
                if (new AutoCSer.WebView.UnionType {
                    Value = page
                }.AjaxBase.CallAjax())
                {
                    return(true);
                }
                break;

            case Http.GetFormType.PubAjax:
                if (new AutoCSer.WebView.UnionType {
                    Value = page
                }.PubAjax.Call())
                {
                    return(true);
                }
                break;
            }
            page.CancelGetForm();
            return(false);
        }
예제 #3
0
 /// <summary>
 /// 是否缓冲区
 /// </summary>
 internal void Free()
 {
     if (SendFileStream != null)
     {
         SendFileStream.Dispose();
         SendFileStream = null;
     }
     if ((Flag & SocketFlag.IsLoadForm) != 0)
     {
         Form.Clear();
         FormBuffer.Clear();
     }
     if ((Flag & SocketFlag.GetForm) != 0)
     {
         GetFormPage.CancelGetForm();
         GetFormPage = null;
     }
     if ((Flag & SocketFlag.BigBuffer) != 0)
     {
         BigBuffer.Free();
     }
     Http.Response.Push(ref HttpResponse);
     Flag = SocketFlag.None;
 }
예제 #4
0
 ///// <summary>
 ///// 获取请求表单数据
 ///// </summary>
 ///// <param name="identity">HTTP操作标识</param>
 ///// <param name="page">WEB 页面</param>
 ///// <param name="type">获取请求表单数据回调类型</param>
 ///// <returns>是否匹配会话标识</returns>
 //internal abstract bool GetForm(long identity, AutoCSer.WebView.Page page, GetFormType type);
 /// <summary>
 /// 获取请求表单数据
 /// </summary>
 /// <param name="page">WEB 页面</param>
 /// <param name="type">获取请求表单数据回调类型</param>
 internal abstract void GetForm(AutoCSer.WebView.Page page, GetFormType type);