public void Set(ClientUID client_uid, ushort header, ByteArray by)
 {
     data.WriteUShort(header);  //必须填入id
     client_uid.Write(data);
     by.Skip(ClientUID.Size()); //由于by是C2S消息,带ClientUID,所以跳过
     by.Read(data, by.Available);
 }
        public override int Send(long conn_idx, ByteArray by)
        {
            base.Send(conn_idx, by);

            if (m_socket == null)
            {
                return(0);
            }

            if (by.Available >= NetID.SendPacketMaxSize)
            {
                by.Skip(NetID.PacketHeadSize);
                ushort header = by.ReadUShort();
                Log.Error("发送数据量过大:" + header);
                return(0);
            }
            int data_len = by.Available - NetID.PacketHeadSize;

            by.ModifyUShort((ushort)data_len, 0);
            m_send_stream.SetLength(0);
            m_send_stream.Write(by.GetBuffer(), 0, (int)by.Available);//数据内容

            m_socket.Send(m_send_stream.ToArray());
            return((int)m_send_stream.Length);
        }
Example #3
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;
         }
     }
 }