コード例 #1
0
 protected void ParsePacket()
 {
     while (m_by_buffer.Available >= NetID.PacketHeadSize)
     {
         if (m_by_buffer.Peek(ref head_by, NetID.PacketHeadSize))
         {
             ushort msg_length = BitConverter.ToUInt16(head_by, 0);
             if (m_by_buffer.Available >= msg_length + NetID.PacketHeadSize)
             {
                 //读取包数据
                 m_by_buffer.Skip(NetID.PacketHeadSize);
                 ushort header = m_by_buffer.ReadUShort();
                 m_dispatcher_buffer.Clear();
                 int len = m_by_buffer.Read(m_dispatcher_buffer, msg_length - sizeof(ushort));
                 if (len != msg_length - sizeof(ushort))
                 {
                     Log.Error("读取错误");
                     m_by_buffer.Skip(msg_length - sizeof(ushort));//跳到下一个位置
                     continue;
                 }
                 //派发数据
                 if (m_net_socket != null && m_net_socket.OnReceive != null)
                 {
                     m_net_socket.OnReceive(m_conn_idx, header, m_dispatcher_buffer);
                 }
             }
             else
             {
                 break;
             }
         }
         else
         {
             break;
         }
     }
 }