示例#1
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));
        }
示例#2
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));
        }