示例#1
0
 public void sendPacket(SerialPortPacket packet)
 {
     mSendPacketLock.waitForUnlock();
     if (mSendPacket.Count < MAX_SEND_PACKET_COUNT)
     {
         mSendPacket.Add(packet);
     }
     mSendPacketLock.unlock();
 }
示例#2
0
 protected bool parseThread()
 {
     if (mInputDataSize > 0)
     {
         mInputBufferLock.waitForUnlock();
         // 首先解析包头
         PacketHeader header = new PacketHeader(GameDefine.REPORT_IN);
         PARSE_RESULT result = header.parseData(mInputBuffer, mInputDataSize);
         // 解析失败,则将缓冲区清空
         if (result == PARSE_RESULT.PR_ERROR)
         {
             clearInputBuffer();
         }
         // 数据不足,继续等待接收数据
         else if (result == PARSE_RESULT.PR_NOT_ENOUGH)
         {
             ;
         }
         // 解析成功,判断包类型,继续解析
         else if (result == PARSE_RESULT.PR_SUCCESS)
         {
             SerialPortPacket packet = createPacket(mInputBuffer[header.mHeaderLength]);
             if (packet != null)
             {
                 int offset = 0;
                 packet.parseData(header, mInputBuffer, mInputDataSize, ref offset);
                 // 解析数量与包头不一致,清空缓冲区
                 if (offset != header.mHeaderLength + header.mPayloadLength)
                 {
                     clearInputBuffer();
                 }
                 // 解析正确,移除已解析的数据
                 else
                 {
                     removeDataFromInputBuffer(0, offset);
                     // 加入接收的消息包列表
                     mReceivedPacketLock.waitForUnlock();
                     if (mReceivedPacket.Count < MAX_RECEIVE_PACKET_COUNT)
                     {
                         mReceivedPacket.Add(packet);
                     }
                     mReceivedPacketLock.unlock();
                 }
                 mLastPacketTime = DateTime.Now;
             }
             else
             {
                 clearInputBuffer();
             }
         }
         mInputBufferLock.unlock();
     }
     return(true);
 }