Example #1
0
        protected override IEnumerable <Type> FindHandlers(Assembly assembly)
        {
            var assemblyTypes      = assembly.GetTypes();
            var packetHandlerTypes = assemblyTypes.Where(type =>
                                                         Attribute.IsDefined(type, typeof(PacketHandlerClassAttribute)) &&
                                                         PacketHandlerClassAttribute.IsValidPacketHandlerClass(type));

            return(packetHandlerTypes);
        }
Example #2
0
        protected override KeyValuePair <Type, IPacketHandler> ExtractHandler(Type handlerMetaType)
        {
            var packetType = PacketHandlerClassAttribute.FindPacketHandlerGenericInterface(handlerMetaType)
                             .GenericTypeArguments[0];

            var packetHandler = Activator.CreateInstance(handlerMetaType) as IPacketHandler;

            return(new KeyValuePair <Type, IPacketHandler>(packetType, packetHandler));
        }
Example #3
0
        protected override KeyValuePair <Type, HandlePacketGeneric> ExtractHandler(Type handlerMetaType)
        {
            var packetType = PacketHandlerClassAttribute.FindPacketHandlerGenericInterface(handlerMetaType)
                             .GenericTypeArguments[0];

            var genericDelegateFactory = GetType().GetMethod(nameof(CreateHandlerDelegate),
                                                             BindingFlags.NonPublic | BindingFlags.Static);

            var typedDelegateFactory  = genericDelegateFactory.MakeGenericMethod(packetType);
            var packetHandler         = Activator.CreateInstance(handlerMetaType) as IPacketHandler;
            var instance              = typedDelegateFactory.Invoke(null, new object[] { packetHandler });
            var packetHandlerDelegate = instance as HandlePacketGeneric;

            return(new KeyValuePair <Type, HandlePacketGeneric>(packetType, packetHandlerDelegate));
        }