Exemplo n.º 1
0
 /// <summary>
 /// 异步接收数据线程
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 void ProcessReceiveThreadCallback(object sender, UploadDataCompletedEventArgs e)
 {
     try {
         // 消息异常处理
         if (e.Error != null)
         {
             string errorState = e.Error.GetType().Name;
             if (errorState == "WebException")
             {
                 WebException    webExp   = (WebException)e.Error;
                 HttpWebResponse response = (HttpWebResponse)webExp.Response;
                 mStatueCodeQueue.Enqueue(response.StatusCode);
             }
             return;
         }
         // httpClient
         // WebClient mClient = (WebClient)sender;
         // 返回结果
         if (e.Result != null && e.Result.Length > 0)
         {
             byte[]   buffer = e.Result;
             PBPacket packet = new PBPacket();
             packet.Decoder(buffer);
             EnqueuePacket(packet);
         }
     } catch (Exception ex) {
         new Exception("not achieve " + ex.ToString());
     } finally {
         mCanSend = true;
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 处理缓冲区中的数据包
        /// </summary>
        /// <param name="recvLen"></param>
        void TryParsePacket(int recvLen)
        {
            // 更新标识
            mReceivePos += recvLen;
            // 包头长度
            int headerSize = PBConst.PB_HEAD_SIZE;

            while (mReceivePos >= headerSize)
            {
                try {
                    // 获取到消息包体长度
                    int bodySize   = BitConverter.ToInt32(mRecvBuff, 0);
                    int packetSize = headerSize + bodySize;
                    // 检查是否满足一个包长度
                    if (mReceivePos >= packetSize)
                    {
                        PBPacket packet = new PBPacket();
                        packet.Decoder(mRecvBuff);
                        if (packet == null)
                        {
                            continue;
                        }
                        EnqueuePacket(packet);
                        // 接收缓冲区偏移处理
                        for (int i = 0; i < (mReceivePos - packetSize); i++)
                        {
                            mRecvBuff[i] = mRecvBuff[packetSize + i];
                        }
                        mReceivePos -= packetSize;
                    }
                    else
                    {
                        break;
                    }
                } catch (Exception ex) {
                    new Exception("not achieve " + ex.ToString());
                    break;
                }
            }
        }