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); }
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; } } }