/// <summary> /// 发包 /// </summary> /// <param name="conn_idx"></param> /// <param name="packet"></param> public void Send(long conn_idx, PacketBase packet) { if (m_sockets.Contains(conn_idx)) { //包索引 uint packet_idx = 0; if (packet is PackBaseC2S) { packet_idx = PacketEncrypt.GetPacketIndex(); (packet as PackBaseC2S).packet_idx = PacketEncrypt.EncrpytPacketIndex(packet_idx, GlobalID.ENCRYPT_KEY); } m_send_by.Clear(); m_send_by.WriteUShort(0);//先写入长度占位 packet.Write(m_send_by); int data_len = m_send_by.Available - NetID.PacketHeadSize; m_send_by.ModifyUShort((ushort)data_len, 0); //数据有效性 if (packet is PackBaseC2S) { //包长2 + 协议头2 + 包索引id4 + 有效性校验2 = 10 ushort data_verify = PacketEncrypt.CalcPacketDataVerify(m_send_by.Buffer, 10, m_send_by.Available - 10, packet_idx, GlobalID.ENCRYPT_KEY); m_send_by.ModifyUShort((ushort)data_verify, 8); } int size = NetConnectManager.Instance.Send(conn_idx, m_send_by); m_send_msg_count++; m_send_msg_size += size; } PacketPools.Recover(packet); }
/// <summary> /// 发包 /// </summary> /// <param name="conn_idx"></param> /// <param name="packet"></param> public void Send(PacketBase packet) { if (m_cur_conn_idx > 0) { //包索引 uint packet_idx = 0; if (packet is PackBaseC2S) { packet_idx = PacketEncrypt.GetPacketIndex(); (packet as PackBaseC2S).packet_idx = PacketEncrypt.EncrpytPacketIndex(packet_idx, GlobalID.ENCRYPT_KEY); } //数据写入stream m_send_by.Clear(); m_send_by.WriteUShort(0); //先写入长度占位 packet.Write(m_send_by); int data_len = m_send_by.Available - NetID.PacketHeadSize; //总长度 m_send_by.ModifyUShort((ushort)data_len, 0); //数据有效性 if (packet is PackBaseC2S) { //包长2 + 协议头2 + 包索引id4 + 有效性校验2 = 10 ushort data_verify = PacketEncrypt.CalcPacketDataVerify(m_send_by.Buffer, 10, m_send_by.Available - 10, packet_idx, GlobalID.ENCRYPT_KEY); m_send_by.ModifyUShort((ushort)data_verify, 8); } NetConnectManager.Instance.Send(m_cur_conn_idx, m_send_by); } PacketPools.Recover(packet); }
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); }