예제 #1
0
 public virtual void ProcessPacketStream(SocketStateObject state, uint packetId, DataStream packetStream)
 {
     Log.ConditionalDebug("Packet: {0} (0x{0:X2})", packetId);
     if (Handler.Contains(packetId))
     {
         object packet = PacketsRegistry.Deserialize(packetId, packetStream);
         if (packet != null)
         {
             Handler.HandlePacket(packetId, packet);
         }
     }
 }
예제 #2
0
        public void Register(string packetId, FieldBase declaration)
        {
            var flags = PacketsRegistry.GetPacketFlags(packetId);
            var id    = PacketsRegistry.ParsePacketId(packetId);

            var count = 0;

            foreach (var flag in flags)
            {
                count++;
                PacketsDeclaration[GetKey(flag, id)] = declaration;
            }

            if (count == 0)
            {
                PacketsDeclaration[GetKey('i', id)] = declaration;
                PacketsDeclaration[GetKey('o', id)] = declaration;
            }
        }
예제 #3
0
        public virtual void Send(uint packetId, object packet)
        {
            var cancel = SendHandler.HandlePacket(packetId, packet)?.Cancel ?? false;

            if (cancel)
            {
                return;
            }

            var ds = new DataStream {
                IsLittleEndian = false
            };
            var ok = PacketsRegistry.Serialize(packetId, ds, packet);

            if (ok)
            {
                Send(packetId, ds);
                SendCompleteHandler.HandlePacket(packetId, packet);
            }
            else
            {
                Log.Error("Try to send unknown packet {0}", packetId);
            }
        }