/// <summary> /// 开始接收表单数据 /// </summary> /// <param name="loadForm">HTTP请求表单加载接口</param> public void Receive(requestForm.ILoadForm loadForm) { headerReceiver headerReceiver = socket.HeaderReceiver; requestHeader requestHeader = headerReceiver.RequestHeader; this.loadForm = loadForm; contentLength = requestHeader.ContentLength; if (contentLength < socket.Buffer.Length) { buffer = socket.Buffer; memoryPool = null; } else { memoryPool = getMemoryPool(contentLength + 1); buffer = memoryPool.Get(contentLength + 1); } receiveEndIndex = headerReceiver.ReceiveEndIndex - headerReceiver.HeaderEndIndex - sizeof(int); System.Buffer.BlockCopy(requestHeader.Buffer, headerReceiver.HeaderEndIndex + sizeof(int), buffer, 0, receiveEndIndex); headerReceiver.ReceiveEndIndex = headerReceiver.HeaderEndIndex; if (receiveEndIndex == contentLength) { callback(); } else { receiveStartTime = date.nowTime.Now.AddTicks(date.SecondTicks); receive(); } }
/// <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); }
/// <summary> /// 开始接收表单数据 /// </summary> /// <param name="loadForm">HTTP请求表单加载接口</param> public void Receive(requestForm.ILoadForm loadForm) { this.loadForm = loadForm; try { headerReceiver headerReceiver = socket.HeaderReceiver; requestHeader requestHeader = headerReceiver.RequestHeader; Buffer = bigBuffers.Get(); boundary = requestHeader.Boundary; receiveLength = receiveEndIndex = headerReceiver.ReceiveEndIndex - headerReceiver.HeaderEndIndex - sizeof(int); System.Buffer.BlockCopy(requestHeader.Buffer, headerReceiver.HeaderEndIndex + sizeof(int), Buffer, 0, receiveEndIndex); headerReceiver.ReceiveEndIndex = headerReceiver.HeaderEndIndex; contentLength = requestHeader.ContentLength; receiveStartTime = date.nowTime.Now.AddTicks(date.SecondTicks); onFirstBoundary(); return; } catch (Exception error) { log.Error.Add(error, null, false); } this.error(); }