Example #1
0
        private void RegisterContext(BuilderModule module)
        {
            module.RegisterInstance(this).ExternallyOwned();

            module.RegisterInstance(RuntimeService.Instance).ExternallyOwned();

            module.RegisterType <DependencySource>().As <IDependencySource>().InstancePerDependency();
        }
Example #2
0
        private void RegisterAreas(BuilderModule module)
        {
            foreach (var area in Areas)
            {
                module.RegisterModule(area);

                AddArea(area);
            }
        }
Example #3
0
        private ILifetimeScope BuildScope()
        {
            var module = new BuilderModule();

            RegisterContext(module);

            RegisterAreas(module);

            return(module.Build());
        }
Example #4
0
        public override void OnStart()
        {
            builder = baseModule.GetModule <BuilderModule>(ModuleID.Builder);

            if (builder != null)
            {
                Blueprint          = builder.TargetBlueprint;
                abortTrigger.Value = !builder.TryStartProcess(OnCompleteCallback);
                complete           = false;
            }
        }
Example #5
0
        protected override void ConfigureRequestContainer(ILifetimeScope container, NancyContext context)
        {
            base.ConfigureRequestContainer(container, context);

            var module = new BuilderModule();

            module.Register(c => new WebApiCall(
                                HttpLink.From(context.Request.Url.ToString()),
                                HttpAuthorization.From(context.Request.Headers.Authorization),
                                WebApiCallBody.From(context.Request.Headers.ContentType, () => context.Request.Body)))
            .InstancePerRequest();

            module.Update(container.ComponentRegistry);
        }
Example #6
0
        public void ShouldNotBuildWhenBuildingDoesntExistsAtPos()
        {
            MemoryLogger    logger;
            BuilderModule   module;
            IWorkerModule   workerModule;
            ITaskModule     taskModule;
            IBuildingModule buildingModule;

            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;



            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1, X = 10, Y = 10
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, RemainingBuildSteps = 5
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            stackModule = new MockedStackModule(false, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            logger = new MemoryLogger();
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIONotFoundException>(() => module.BeginBuild(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
Example #7
0
        public void ShouldBuild()
        {
            BuilderModule         module;
            IWorkerModule         workerModule;
            ITaskModule           taskModule;
            MockedSchedulerModule schedulerModule;
            IBuildingModule       buildingModule;
            IBuildingTypeModule   buildingTypeModule;
            IStackModule          stackModule;
            IMaterialModule       materialModule;
            Task result;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, BuildingTypeID = BuildingTypeIDs.Sawmill, RemainingBuildSteps = 5
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module          = new BuilderModule(NullLogger.Instance, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);
            schedulerModule = new MockedSchedulerModule(false, module);

            result = module.BeginBuild(1);

            Assert.IsNotNull(result);
            Assert.AreEqual(TaskTypeIDs.Build, result.TaskTypeID);
            Assert.AreEqual(1, result.WorkerID);
            Assert.AreEqual(1, schedulerModule.Count);
        }
Example #8
0
        public void ShouldNotCreateBuildingWhenPositionIsOccupied()
        {
            MemoryLogger        logger;
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1, X = 10, Y = 10
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, X = 10, Y = 10
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });

            logger      = new MemoryLogger();
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIOInvalidOperationException>(() => module.BeginCreateBuilding(1, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
Example #9
0
        public void ShouldEndBuildTasks()
        {
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;


            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule     = new MockedTaskModule(false);
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, BuildingTypeID = BuildingTypeIDs.Sawmill, RemainingBuildSteps = 5
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill, BuildSteps = 5
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                BuildingID = 2, Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(NullLogger.Instance, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            module.EndBuild(1);
            Assert.AreEqual(4, buildingModule.GetBuilding(2).RemainingBuildSteps);
        }
Example #10
0
        public void ShouldNotCreateBuildingWhenWorkerIsAlreadyWorking()
        {
            MemoryLogger  logger;
            BuilderModule module;
            IWorkerModule workerModule;
            ITaskModule   taskModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule = new MockedTaskModule(false, new Task()
            {
                WorkerID = 1
            });

            logger = new MemoryLogger();
            module = new BuilderModule(logger, taskModule, workerModule, null, null, null, null);

            Assert.ThrowsException <PIOInvalidOperationException>(() => module.BeginCreateBuilding(1, BuildingTypeIDs.Forest));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
Example #11
0
 public override void OnStart()
 {
     builder = baseModule.GetModule <BuilderModule>(ModuleID.Builder);
 }
Example #12
0
        public void ShouldNotEndCreateBuildingTaskWhenSubModuleFails()
        {
            MemoryLogger        logger;
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;



            logger       = new MemoryLogger();
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule         = new MockedTaskModule(false);
            buildingModule     = new MockedBuildingModule(false);
            buildingTypeModule = new MockedBuildingTypeModule(true, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIOInternalErrorException>(() => module.EndCreateBuilding(1, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));



            logger       = new MemoryLogger();
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule         = new MockedTaskModule(false);
            buildingModule     = new MockedBuildingModule(true);
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIOInternalErrorException>(() => module.EndCreateBuilding(1, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }
Example #13
0
File: Program.cs Project: dfgs/PIO
        static void Main(string[] args)
        {
            ILogger logger;
            VersionControlModule versionControlModule;
            ServiceHostModule    pioServiceHostModule;
            ServiceHostModule    taskCallbackServiceHostModule;
            SchedulerModule      schedulerModule;

            IPIOService          pioService;
            ITaskCallbackService taskCallbackService;
            IDatabase            database;
            IConnectionFactory   connectionFactory;
            ICommandBuilder      commandBuilder;
            IDatabaseCreator     databaseCreator;

            IPlanetGeneratorModule planetGeneratorModule;

            IPhraseModule       phraseModule;
            IPlanetModule       planetModule;
            ICellModule         cellModule;
            IBuildingModule     buildingModule;
            IWorkerModule       workerModule;
            IBuilderModule      factoryBuilderModule;
            IStackModule        stackModule;
            IResourceTypeModule resourceTypeModule;
            IBuildingTypeModule buildingTypeModule;
            ITaskTypeModule     taskTypeModule;
            IMaterialModule     materialModule;
            IIngredientModule   ingredientModule;
            IProductModule      productModule;
            ITaskModule         taskModule;

            IIdlerModule           idlerModule;
            IResourceCheckerModule resourceCheckerModule;
            ILocationCheckerModule locationCheckerModule;
            IProducerModule        producerModule;
            IHarvesterModule       harvesterModule;
            IMoverModule           moverModule;
            ITakerModule           takerModule;
            IStorerModule          storerModule;

            quitEvent = new AutoResetEvent(false);
            Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);

            //logger = new ConsoleLogger(new DefaultLogFormatter());
            logger = new UnicastLogger(IPAddress.Loopback, Properties.Settings.Default.UnicastPort);
            //logger = new FileLogger(new DefaultLogFormatter(), "PIO.ServerHost.Log");

            databaseCreator   = new SqlDatabaseCreator(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName);
            connectionFactory = new SqlConnectionFactory(Properties.Settings.Default.Server, Properties.Settings.Default.DatabaseName);
            commandBuilder    = new SqlCommandBuilder();
            database          = new Database(connectionFactory, commandBuilder);

            versionControlModule = new VersionControlModule(logger, databaseCreator, new PIOVersionControl(database));
            if (!versionControlModule.InitializeDatabase(Properties.Settings.Default.DropDatabase))
            {
                return;
            }


            phraseModule       = new PhraseModule(logger, database);
            planetModule       = new PlanetModule(logger, database);
            cellModule         = new CellModule(logger, database);
            buildingModule     = new BuildingModule(logger, database);
            workerModule       = new WorkerModule(logger, database);
            stackModule        = new StackModule(logger, database);
            resourceTypeModule = new ResourceTypeModule(logger, database);
            buildingTypeModule = new BuildingTypeModule(logger, database);
            taskTypeModule     = new TaskTypeModule(logger, database);
            materialModule     = new MaterialModule(logger, database);
            ingredientModule   = new IngredientModule(logger, database);
            productModule      = new ProductModule(logger, database);
            taskModule         = new TaskModule(logger, database);


            factoryBuilderModule  = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);;
            idlerModule           = new IdlerModule(logger, taskModule, workerModule);
            resourceCheckerModule = new ResourceCheckerModule(logger, buildingModule, stackModule, ingredientModule, materialModule);
            locationCheckerModule = new LocationCheckerModule(logger, workerModule, buildingModule);
            producerModule        = new ProducerModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, ingredientModule, productModule);
            harvesterModule       = new HarvesterModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, productModule);
            moverModule           = new MoverModule(logger, taskModule, workerModule, buildingModule);
            takerModule           = new TakerModule(logger, taskModule, workerModule, buildingModule, stackModule);
            storerModule          = new StorerModule(logger, taskModule, workerModule, buildingModule, stackModule);

            planetGeneratorModule = new PlanetGeneratorModule(logger, phraseModule, resourceTypeModule, buildingTypeModule, taskTypeModule, materialModule, ingredientModule, productModule, planetModule, cellModule, buildingModule, workerModule);
            if (!planetGeneratorModule.Generate())
            {
                return;
            }

            schedulerModule = new SchedulerModule(logger, taskModule, idlerModule, producerModule, harvesterModule, moverModule, takerModule, storerModule, factoryBuilderModule);
            schedulerModule.Start();


            pioService = new PIOService(
                logger, phraseModule, planetModule, cellModule, buildingModule, workerModule,
                stackModule, resourceTypeModule,
                buildingTypeModule, taskTypeModule, materialModule, ingredientModule, productModule, taskModule,
                schedulerModule,
                resourceCheckerModule, locationCheckerModule, idlerModule, producerModule, harvesterModule, moverModule, takerModule, storerModule,
                factoryBuilderModule);

            pioServiceHostModule = new ServiceHostModule(logger, pioService);
            pioServiceHostModule.Start();

            taskCallbackService           = new TaskCallbackService(logger, schedulerModule);
            taskCallbackServiceHostModule = new ServiceHostModule(logger, taskCallbackService);
            taskCallbackServiceHostModule.Start();

            WaitHandle.WaitAny(new WaitHandle[] { quitEvent }, -1);

            taskCallbackServiceHostModule.Stop();
            pioServiceHostModule.Stop();
            schedulerModule.Stop();

            Console.CancelKeyPress -= new ConsoleCancelEventHandler(Console_CancelKeyPress);
        }