Ejemplo n.º 1
0
        public void AllPacketsAreHandled()
        {
            World         world = new World();
            PacketHandler ph    = new PacketHandler(world);

            Dictionary <Type, PacketProcessor> authenticatedPacketProcessorsByType   = (Dictionary <Type, PacketProcessor>) typeof(PacketHandler).GetField("authenticatedPacketProcessorsByType", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ph);
            Dictionary <Type, PacketProcessor> unauthenticatedPacketProcessorsByType = (Dictionary <Type, PacketProcessor>) typeof(PacketHandler).GetField("unauthenticatedPacketProcessorsByType", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ph);

            HashSet <Type> packetTypes = new HashSet <Type>(
                authenticatedPacketProcessorsByType
                .Concat(unauthenticatedPacketProcessorsByType)
                .Select(kvp => kvp.Key));

            ContainerBuilder       containerBuilder          = new ContainerBuilder();
            ClientAutoFaqRegistrar clientDependencyRegistrar = new ClientAutoFaqRegistrar();

            clientDependencyRegistrar.RegisterDependencies(containerBuilder);
            IContainer clientDependencyContainer = containerBuilder.Build(ContainerBuildOptions.IgnoreStartableComponents);

            typeof(Packet).Assembly.GetTypes()
            .Where(p => typeof(Packet).IsAssignableFrom(p) && p.IsClass && !p.IsAbstract)
            .ToList()
            .ForEach(packet =>
            {
                Type clientPacketProcessorType = typeof(ClientPacketProcessor <>);
                Type clientProcessorType       = clientPacketProcessorType.MakeGenericType(packet);

                Console.WriteLine("Checking handler for packet {0}...", packet);
                Assert.IsTrue(packetTypes.Contains(packet) || clientDependencyContainer.Resolve(clientProcessorType) != null,
                              $"Runtime has not detected a handler for {packet}!");
            }
                     );
        }
Ejemplo n.º 2
0
        public void RuntimeDetectsAllClientPacketProcessors()
        {
            ContainerBuilder       containerBuilder          = new ContainerBuilder();
            ClientAutoFaqRegistrar clientDependencyRegistrar = new ClientAutoFaqRegistrar();

            clientDependencyRegistrar.RegisterDependencies(containerBuilder);
            IContainer clientDependencyContainer = containerBuilder.Build(ContainerBuildOptions.IgnoreStartableComponents);

            // Check if every PacketProcessor has been detected:
            typeof(Multiplayer).Assembly.GetTypes()
            .Where(p => typeof(PacketProcessor).IsAssignableFrom(p) && p.IsClass && !p.IsAbstract)
            .ToList()
            .ForEach(processor =>
                     Assert.IsTrue(clientDependencyContainer.Resolve(processor.BaseType) != null,
                                   $"{processor} has not been discovered by the runtime code!")
                     );
        }