Beispiel #1
0
 private PacketFilter(PacketFilter other)
 {
     Order    = other.Order;
     Forged   = other.Forged;
     Modified = other.Modified;
     Silenced = other.Silenced;
     Function = other.Function;
 }
 internal PacketHandler(bool raw, string name, ushort?code, Delegate handler,
                        PacketFilter filter)
 {
     IsRaw   = raw;
     Name    = name;
     Code    = code;
     Handler = handler ?? throw new ArgumentNullException(nameof(handler));
     Filter  = filter ?? new PacketFilter();
 }
        public PacketHandler AddHandler(GlobalPacketHandler handler, PacketFilter filter = null)
        {
            var ph = new PacketHandler(true, null, null, handler, filter);

            lock (_listLock)
                _globalHandlers.Add(ph);

            return(ph);
        }
        public PacketHandler AddHandler(string name, RawPacketHandler handler, PacketFilter filter = null)
        {
            if (!Context.Serializer.GameMessages.NameToCode.TryGetValue(name, out var code))
            {
                throw new UnmappedMessageException();
            }

            var ph   = new PacketHandler(true, name, code, handler, filter);
            var list = _codeHandlers[code];

            lock (_listLock)
                list.Add(ph);

            return(ph);
        }
        public PacketHandler AddHandler <T>(TypedPacketHandler <T> handler, PacketFilter filter = null)
            where T : SerializablePacket
        {
            var name = typeof(T).GetCustomAttribute <PacketAttribute>()?.Name;

            if (name == null)
            {
                throw new ArgumentException("Invalid packet type.");
            }

            if (!Context.Serializer.GameMessages.NameToCode.TryGetValue(name, out var code))
            {
                throw new UnmappedMessageException();
            }

            var ph   = new PacketHandler(false, name, code, handler, filter);
            var list = _codeHandlers[code];

            lock (_listLock)
                list.Add(ph);

            return(ph);
        }