///// <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(); }
/// <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); }
/// <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; }
///// <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);