コード例 #1
0
ファイル: MessageManage.cs プロジェクト: loudy2000/pcqq-1
        private void Receive(object state)
        {
            while (true)
            {
                var result = _service.Receive();

                var hexStr = Util.ToHex(result.Data);
                hexStr = hexStr.Substring(0, hexStr.LastIndexOf("03 00") + 2);
                //包装到ByteBuffer
                var tempBuf = Util.HexStringToByteArray(hexStr);
                //需要一个基础包
                var receivePacket = new ReceivePacket(tempBuf, _user, null);
                //接收消息后触发事件
                var receiveEvent = new QQEventArgs <ReceivePacket>(_service, _user, receivePacket);
                if (QQGlobal.DebugLog)
                {
                    _service.MessageLog($"接收数据:{Util.ToHex(receiveEvent.ReceivePacket.Buffer)}");
                }

                // 通过Command, 利用反射+Attribute, 分发到管理具体某个包的Command中,最后直接调用Receive方法即可。
                // 将对包的处理移到具体Command中,此处只负责分发。
                var receiveCommand = DispatchPacketToCommand.Of(tempBuf, _service, _transponder, _user)
                                     .dispatch_receive_packet(receivePacket.Command);
                receiveCommand.Process();
            }
        }
コード例 #2
0
        private void Receive(object state)
        {
            while (true)
            {
                EndPoint RecivePoint = new IPEndPoint(IPAddress.Any, 0);            //用来保存发送方的ip和端口号
                var      buffer      = new byte[QQGlobal.QQ_PACKET_MAX_SIZE];
                var      length      = Server.ReceiveFrom(buffer, ref RecivePoint); //接收数据报

                var hexStr = Util.ToHex(buffer);
                hexStr = hexStr.Substring(0, hexStr.LastIndexOf("03 00") + 2);
                //包装到ByteBuffer
                var tempBuf = Util.HexStringToByteArray(hexStr);
                //需要一个基础包
                var _ReceivePacket = new ReceivePacket(tempBuf, client.QQUser, null);
                //接收消息后触发事件
                var ReceiveEvent = new QQEventArgs <ReceivePacket>(client, _ReceivePacket);
                client.OnReceive(ReceiveEvent);

                // 通过Command, 利用反射+Attribute, 分发到管理具体某个包的Command中,最后直接调用Receive方法即可。
                // 将对包的处理移到具体Command中,此处只负责分发。
                var receive_command = DispatchPacketToCommand.of(tempBuf, client).dispatch_receive_packet(_ReceivePacket.Command);
                receive_command.Receive();
            }
        }