public int Send(long conn_idx, PacketBase packet) { m_send_by.Clear(); m_send_by.WriteUShort(0);//先写入长度占位 packet.Write(m_send_by); int len = NetConnectManager.Instance.Send(conn_idx, m_send_by); PacketPools.Recover(packet); return(len); }
/// <summary> /// 发消息给client /// </summary> /// <param name="conn_idx"></param> /// <param name="packet"></param> /// <returns></returns> public int Send(long conn_idx, PacketBase packet) { int size = 0; if (m_net_socket != null) { m_send_by.Clear(); m_send_by.WriteUShort(0);//先写入长度占位 packet.Write(m_send_by); size = m_net_socket.Send(conn_idx, m_send_by); } PacketPools.Recover(packet); return(size); }
/// <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> public static void QueryDBEvent(long char_idx, DBID db_id, Action <List <DBEventInfo> > callback) { List <DBEventInfo> list = new List <DBEventInfo>(); ByteArray by = DBUtils.AllocDBArray(); string sql = "call SP_DB_EVENT_LOAD(" + char_idx + ")"; DBManager.Instance.GetDB(eDBType.Game, db_id.game_id).Query(sql, (reader) => { if (reader.HasRows) { while (reader.Read()) { DBEventInfo info = new DBEventInfo(); info.event_idx = reader.GetInt64(0); info.target_char_idx = reader.GetInt64(1); info.source_char_idx = reader.GetInt64(2); info.event_type = (eDBEventType)reader.GetByte(3); //内容 by.Clear(); long len = reader.GetBytes(4, 0, null, 0, int.MaxValue); reader.GetBytes(4, 0, by.Buffer, 0, (int)len); by.WriteEmpty((int)len); info.bin_content.Read(by); list.Add(info); } } callback(list); }); }
/// <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); }
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; } } }
public override void Init() { base.Init(); data.Clear(); }
public static ByteArray AllocDBArray() { tmpDBArray.Clear(); return(tmpDBArray); }
public static ByteArray AllocSendPacket() { tmpSendBy.Clear(); tmpSendBy.WriteUShort(0);//协议头,包长度 return(tmpSendBy); }