コード例 #1
0
        public void Read(ByteArray by)
        {
            subject = by.ReadString();
            content = by.ReadString();
            ushort count = by.ReadUShort();

            for (int i = 0; i < count; ++i)
            {
                PropID obj = new PropID();
                obj.Read(by);
                this.Add(obj);
            }
        }
コード例 #2
0
            public void Read(ByteArray by)
            {
                type = (eUnitModType)by.ReadUShort();
                switch (type)
                {
                case eUnitModType.UMT_char_name:
                    value_str = by.ReadString();
                    break;

                default:
                    value_i = by.ReadLong();
                    break;
                }
            }
コード例 #3
0
 public void Read(ByteArray by)
 {
     mail_idx      = by.ReadLong();
     mail_type     = (eMailType)by.ReadByte();
     spid          = by.ReadUShort();
     receiver_idx  = by.ReadLong();
     sender_idx    = by.ReadLong();
     sender_name   = by.ReadString();
     send_time     = by.ReadLong();
     expire_time   = by.ReadInt();
     delivery_time = by.ReadInt();
     flags         = by.ReadUInt();
     subject       = by.ReadString();
     bin_mail_content.Read(by);
 }
コード例 #4
0
 public void Read(ByteArray by)
 {
     char_idx  = by.ReadLong();
     char_name = by.ReadString();
     char_type = by.ReadByte();
     flags     = by.ReadUInt();
     model_idx = by.ReadUInt();
     job       = by.ReadByte();
     level     = by.ReadUShort();
     exp       = by.ReadUInt();
     energy    = by.ReadUInt();
     gold      = by.ReadUInt();
     coin      = by.ReadUInt();
     hp        = by.ReadUInt();
     hp_max    = by.ReadUInt();
     hurt      = by.ReadUInt();
     range     = by.ReadUInt();
     run_speed = by.ReadUInt();
     vip_grade = by.ReadUInt();
     vip_flags = by.ReadUInt();
 }
コード例 #5
0
        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_socket.Send(by.GetBuffer(), 0, (int)by.Available);
            return((int)by.Available);
        }
コード例 #6
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;
         }
     }
 }
コード例 #7
0
 public void Read(ByteArray by)
 {
     ip   = by.ReadUInt();
     port = by.ReadUShort();
 }
コード例 #8
0
 public void Read(ByteArray by)
 {
     srv_uid  = by.ReadUShort();
     conn_idx = by.ReadLong();
 }
コード例 #9
0
        /// <summary>
        /// 网络事件处理
        /// </summary>
        public void OnNetworkClient(long conn_idx, ushort header, ByteArray data)
        {
            ClientSession session = ClientSessionManager.Instance.GetSession(conn_idx);

            if (session != null)
            {
                ///1.判断cd
                if (!session.CheckCooldown(header))
                {
                    //Log.Debug("协议cd不够:" + header);
                    return;
                }

                ///2.消息解密
                if (GlobalID.ENABLE_PACKET_ENCRYPT)
                {
                    //id有效性校验
                    uint packet_idx = data.ReadUInt();
                    packet_idx = PacketEncrypt.DecrpytPacketIndex(packet_idx, PacketEncrypt.Encrypt_Key);
                    if (packet_idx < session.last_packet_idx)
                    {
                        Log.Warning("协议索引校验失败conn_idx:" + conn_idx + " header:" + header);
                        ClientSessionManager.Instance.KickoutSession(conn_idx);
                        return;
                    }
                    session.last_packet_idx = packet_idx;

                    //验证数据的有效性:防止被修改
                    ushort send_verify_data = data.ReadUShort();
                    ushort verify_data      = PacketEncrypt.CalcPacketDataVerify(data.Buffer, 6, data.Available, packet_idx, PacketEncrypt.Encrypt_Key);
                    if (send_verify_data != verify_data)
                    {
                        Log.Warning("数据有效性校验失败conn_idx:" + conn_idx + " header:" + header);
                        ClientSessionManager.Instance.KickoutSession(conn_idx);
                        return;
                    }
                }

                ///3.是否转发消息
                if (header >= ProtocolID.MSG_BASE_C2SS && header < ProtocolID.MSG_BASE_C2SS + ProtocolID.MSG_APPLAYER_PER_INTERVAL)
                {
                    HandleProxyMsgToSS(session, header, data);
                }
                else if (header >= ProtocolID.MSG_BASE_C2WS && header < ProtocolID.MSG_BASE_C2WS + ProtocolID.MSG_APPLAYER_PER_INTERVAL)
                {
                    HandleProxyMsgToWS(session, header, data);
                }
                else if (header >= ProtocolID.MSG_BASE_C2FS && header < ProtocolID.MSG_BASE_C2FS + ProtocolID.MSG_APPLAYER_PER_INTERVAL)
                {
                    HandleProxyMsgToFS(session, header, data);
                }
                else
                {
                    PacketBase packet = PacketPools.Get(header);
                    packet.Read(data);

                    MsgProcFunction fun;
                    if (m_msg_proc.TryGetValue(packet.header, out fun))
                    {
                        try
                        {
                            fun(session, packet);
                        }
                        catch (Exception e)
                        {
                            Log.Exception(e);
                        }
                    }
                    else
                    {
                        Log.Warning("未注册消息处理函数id:" + header);
                    }
                    PacketPools.Recover(packet);
                }
            }
            else
            {
                PacketBase packet = PacketPools.Get(header);
                packet.Read(data);
                switch (packet.header)
                {
                case c2gs.msg.ENCRYPT:
                    OnClientEncrypt(conn_idx, packet);
                    break;

                default:    //没有session,又不是握手协议,说明发错协议了,直接踢掉
                    ClientSessionManager.Instance.KickoutSession(conn_idx);
                    break;
                }
                PacketPools.Recover(packet);
            }
        }
コード例 #10
0
        public long         cd_time;//相对2009开始倒计时间

        public void Read(ByteArray by)
        {
            type    = (eCounterType)by.ReadUShort();
            count   = by.ReadUShort();
            cd_time = by.ReadLong();
        }
コード例 #11
0
 public void Read(ByteArray by)
 {
     type     = (eUnitType)by.ReadUShort();
     obj_type = by.ReadUInt();
     obj_idx  = by.ReadLong();
 }