public Provider GetOrCreateAccumulator(FramingPlan plan, Getter getter, ProjectionElement parent, ProjectionElement child, ParameterNames parameters)
        {
            var alreadyCreated =
                _cache.FirstOrDefault(k => k.Child == child &&
                                      k.Parent == parent &&
                                      k.Parameters == parameters);

            if (alreadyCreated != null)
            {
                return(alreadyCreated.Provider);
            }

            var storage = new GroupStorage(FrameNode.InPlanComparer);

            plan.AddTempStorage(storage);
            var pusher    = CreatePusher(storage);
            var checker   = CreateChecker(storage);
            var taker     = CreateGetter(storage);
            var packTaker = CreatePackagerGetter(getter, parameters);

            var acc = new Provider(pusher, checker,
                                   taker, packTaker,
                                   FrameNode.InPlanComparer);
            var node = new FactoryNode
            {
                Parent     = parent,
                Child      = child,
                Parameters = parameters,
                Provider   = acc
            };

            _cache.Add(node);
            return(acc);
        }
Beispiel #2
0
        public async Task <ActionResult <FactoryNode> > PostFactory(FactoryNode factoryNode)
        {
            //_context.Factory.Add(factory);
            //await _context.SaveChangesAsync();
            if (factoryNode.children != null)
            {
                System.Console.WriteLine(factoryNode.children);
            }

            //return CreatedAtAction("GetFactory", new { id = factory.ID }, factory);
            FactoryNodeBuilder fnb = new FactoryNodeBuilder(_context);
            Factory            f   = fnb.CreateFactory(factoryNode);

            FactoryNode fn = fnb.CreateFactoryNode(f);

            try
            {
                _hubContext.Clients.All.BroadcastMessage("create", fn);
            }
            catch (Exception e)
            {
                //If the hubContext fails to notify others, The caller doesn't care
                //  but we would log the exception
            }

            return(fn);
        }
        public FactoryNode CreateFactoryNode(Factory factory)
        {
            FactoryNode fn = new FactoryNode();

            fn.ID         = factory.ID;
            fn.lowerBound = factory.lowerBound;
            fn.upperBound = factory.upperBound;
            fn.name       = factory.name;
            fn.parentID   = factory.parentID;
            fn.children   = new List <FactoryNode>();

            if (factory == null)
            {
                return(fn);
            }

            var children = _context.Factory
                           .Where(f => f.parentID == factory.ID).OrderBy(o => o.ID);

            //Check children's children
            if (children.Count() == 0)
            {
                return(fn);
            }

            foreach (Factory f in children.ToList())
            {
                fn.children.Add(CreateFactoryNode(f));
            }

            return(fn);
        }
Beispiel #4
0
        public async Task <ActionResult <FactoryNode> > GetFactory()
        {
            Factory factory = await _context.Factory.FirstOrDefaultAsync(o => o.parentID == -1);

            FactoryNodeBuilder fnb = new FactoryNodeBuilder(_context);
            FactoryNode        fn  = fnb.CreateFactoryNode(factory);

            return(fn);
        }
Beispiel #5
0
        public int GetHighestLevelForFactories()
        {
            int num = 1;

            for (FactoryNode factoryNode = this.FactoryNodeList.Head; factoryNode != null; factoryNode = factoryNode.Next)
            {
                int lvl = factoryNode.BuildingComp.BuildingType.Lvl;
                if (lvl > num)
                {
                    num = lvl;
                }
            }
            return(num);
        }
Beispiel #6
0
        public Entity GetHighestAvailableFactory()
        {
            List <BuildingComponent> list = new List <BuildingComponent>();

            for (FactoryNode factoryNode = this.FactoryNodeList.Head; factoryNode != null; factoryNode = factoryNode.Next)
            {
                SmartEntity selectedBuilding = (SmartEntity)factoryNode.Entity;
                if (!ContractUtils.IsBuildingConstructing(selectedBuilding) && !ContractUtils.IsBuildingUpgrading(selectedBuilding))
                {
                    list.Add(factoryNode.BuildingComp);
                }
            }
            list.Sort(new Comparison <BuildingComponent>(this.CompareBuildingLevels));
            return((list.Count == 0) ? null : list[0].Entity);
        }
Beispiel #7
0
        public async Task <ActionResult <Factory> > DeleteFactory(int id)
        {
            var factory = await _context.Factory.FindAsync(id);

            if (factory == null)
            {
                return(NotFound());
            }

            //Deleting the root node is not allowed
            if (factory.parentID == -1)
            {
                return(NotFound());
            }

            //Find Children & remove them before deleting parent node
            var children = _context.Factory
                           .Where(f => f.parentID == factory.ID).OrderBy(o => o.ID).ToList <Factory>();

            foreach (var childFactory in children)
            {
                CreatedAtAction("DeleteFactory", new { id = childFactory.ID });
            }

            //TODO - Consider removing
            //Not a fan of additional db calls just to delete an item
            //However, we want to be consistent in what our API returns.

            FactoryNodeBuilder fnb = new FactoryNodeBuilder(_context);
            FactoryNode        fn  = fnb.CreateFactoryNode(factory);

            _context.Factory.Remove(factory);
            _context.SaveChanges();

            try
            {
                _hubContext.Clients.All.BroadcastMessage("delete", fn);
            }
            catch (Exception e)
            {
                //If the hubContext fails to notify others, The caller doesn't care
                //  but we would log the exception
            }

            return(factory);
        }
Beispiel #8
0
        public async Task Should_accept_a_completed_node()
        {
            var tracker = new NodeTracker <SimpleValue>(1000, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(60), () => DateTime.UtcNow);

            var observer = new NodeObserver();

            tracker.Connect(observer);

            var pendingValue     = new PendingValue <string, SimpleValue>("Hello", SimpleValueFactory.Healthy);
            var nodeValueFactory = new NodeValueFactory <SimpleValue>(pendingValue, 100);
            var node             = new FactoryNode <SimpleValue>(nodeValueFactory);

            tracker.Add(nodeValueFactory);

            var value = await node.Value;

            var observedNode = await observer.Value;

            Assert.That(observedNode, Is.InstanceOf <BucketNode <SimpleValue> >());
        }
Beispiel #9
0
        public async Task <IActionResult> PutFactory(int id, Factory factory)
        {
            if (id != factory.ID)
            {
                return(BadRequest());
            }

            _context.Entry(factory).State = EntityState.Modified;

            try
            {
                _context.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!FactoryExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            FactoryNodeBuilder fnb = new FactoryNodeBuilder(_context);
            FactoryNode        fn  = fnb.CreateFactoryNode(factory);

            try
            {
                _hubContext.Clients.All.BroadcastMessage("update", fn);
            }
            catch (Exception e)
            {
                //If the hubContext fails to notify others, The caller doesn't care
                //  but we would log the exception
            }

            return(NoContent());
        }
        public Factory CreateFactory(FactoryNode factoryNode)
        {
            Factory factory = new Factory();

            factory.lowerBound = factoryNode.lowerBound;
            factory.upperBound = factoryNode.upperBound;
            factory.name       = factoryNode.name;
            factory.parentID   = factoryNode.parentID;

            Factory parent = _context.Factory.Find(factoryNode.parentID);

            if (parent is null)
            {
                throw new Exception("Invalid parentID.  Can't have a child w/o a parent.");
            }

            try
            {
                _context.Factory.Add(factory);
                _context.SaveChanges();
            }
            catch (Exception ex)
            {
                //Log error
                Console.WriteLine(factory.name + " Failed to create new factory. " + ex.ToString());
                throw;
            }

            foreach (FactoryNode child in factoryNode.children)
            {
                child.parentID = factory.ID;
                CreateFactory(child);
            }

            return(factory);
        }
Beispiel #11
0
        public bool HasConstructedBuilding(BuildingTypeVO reqBuilding)
        {
            int lvl = reqBuilding.Lvl;

            switch (reqBuilding.Type)
            {
            case BuildingType.HQ:
                for (HQNode hQNode = this.HQNodeList.Head; hQNode != null; hQNode = hQNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)hQNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Barracks:
                for (BarracksNode barracksNode = this.BarracksNodeList.Head; barracksNode != null; barracksNode = barracksNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)barracksNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Factory:
                for (FactoryNode factoryNode = this.FactoryNodeList.Head; factoryNode != null; factoryNode = factoryNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)factoryNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.FleetCommand:
                for (FleetCommandNode fleetCommandNode = this.FleetCommandNodeList.Head; fleetCommandNode != null; fleetCommandNode = fleetCommandNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)fleetCommandNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.HeroMobilizer:
                for (TacticalCommandNode tacticalCommandNode = this.TacticalCommandNodeList.Head; tacticalCommandNode != null; tacticalCommandNode = tacticalCommandNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)tacticalCommandNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.ChampionPlatform:
                for (ChampionPlatformNode championPlatformNode = this.ChampionPlatformNodeList.Head; championPlatformNode != null; championPlatformNode = championPlatformNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)championPlatformNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Housing:
                for (HousingNode housingNode = this.HousingNodeList.Head; housingNode != null; housingNode = housingNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)housingNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Squad:
                for (SquadBuildingNode squadBuildingNode = this.SquadBuildingNodeList.Head; squadBuildingNode != null; squadBuildingNode = squadBuildingNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)squadBuildingNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Starport:
                for (StarportNode starportNode = this.StarportNodeList.Head; starportNode != null; starportNode = starportNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)starportNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.DroidHut:
                for (DroidHutNode droidHutNode = this.DroidHutNodeList.Head; droidHutNode != null; droidHutNode = droidHutNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)droidHutNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Wall:
                for (WallNode wallNode = this.WallNodeList.Head; wallNode != null; wallNode = wallNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)wallNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Turret:
                for (TurretBuildingNode turretBuildingNode = this.TurretBuildingNodeList.Head; turretBuildingNode != null; turretBuildingNode = turretBuildingNode.Next)
                {
                    if (turretBuildingNode.BuildingComp.BuildingType.UpgradeGroup == reqBuilding.UpgradeGroup && GameUtils.GetBuildingEffectiveLevel((SmartEntity)turretBuildingNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.TroopResearch:
                for (OffenseLabNode offenseLabNode = this.OffenseLabNodeList.Head; offenseLabNode != null; offenseLabNode = offenseLabNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)offenseLabNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.DefenseResearch:
                for (DefenseLabNode defenseLabNode = this.DefenseLabNodeList.Head; defenseLabNode != null; defenseLabNode = defenseLabNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)defenseLabNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Resource:
                for (GeneratorNode generatorNode = this.GeneratorNodeList.Head; generatorNode != null; generatorNode = generatorNode.Next)
                {
                    if (generatorNode.BuildingComp.BuildingType.Currency == reqBuilding.Currency && GameUtils.GetBuildingEffectiveLevel((SmartEntity)generatorNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Storage:
                for (StorageNode storageNode = this.StorageNodeList.Head; storageNode != null; storageNode = storageNode.Next)
                {
                    if (storageNode.BuildingComp.BuildingType.Currency == reqBuilding.Currency && GameUtils.GetBuildingEffectiveLevel((SmartEntity)storageNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Trap:
                for (TrapNode trapNode = this.TrapNodeList.Head; trapNode != null; trapNode = trapNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)trapNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Cantina:
                for (CantinaNode cantinaNode = this.CantinaNodeList.Head; cantinaNode != null; cantinaNode = cantinaNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)cantinaNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.NavigationCenter:
                for (NavigationCenterNode navigationCenterNode = this.NavigationCenterNodeList.Head; navigationCenterNode != null; navigationCenterNode = navigationCenterNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)navigationCenterNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.ScoutTower:
                for (ScoutTowerNode scoutTowerNode = this.ScoutTowerNodeList.Head; scoutTowerNode != null; scoutTowerNode = scoutTowerNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)scoutTowerNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);

            case BuildingType.Armory:
                for (ArmoryNode armoryNode = this.ArmoryNodeList.Head; armoryNode != null; armoryNode = armoryNode.Next)
                {
                    if (GameUtils.GetBuildingEffectiveLevel((SmartEntity)armoryNode.BuildingComp.Entity) >= lvl)
                    {
                        return(true);
                    }
                }
                return(false);
            }
            Service.Logger.Warn("Unknown reqBuilding type for level: " + reqBuilding.Uid);
            return(false);
        }
Beispiel #12
0
        private void FillBuildingListByType(List <SmartEntity> list, BuildingType type)
        {
            switch (type)
            {
            case BuildingType.Any:
            {
                NodeList <BuildingNode> nodeList = this.entityController.GetNodeList <BuildingNode>();
                for (BuildingNode buildingNode = nodeList.Head; buildingNode != null; buildingNode = buildingNode.Next)
                {
                    list.Add((SmartEntity)buildingNode.Entity);
                }
                return;
            }

            case BuildingType.HQ:
                for (HQNode hQNode = this.HQNodeList.Head; hQNode != null; hQNode = hQNode.Next)
                {
                    list.Add((SmartEntity)hQNode.Entity);
                }
                return;

            case BuildingType.Barracks:
                for (BarracksNode barracksNode = this.BarracksNodeList.Head; barracksNode != null; barracksNode = barracksNode.Next)
                {
                    list.Add((SmartEntity)barracksNode.Entity);
                }
                return;

            case BuildingType.Factory:
                for (FactoryNode factoryNode = this.FactoryNodeList.Head; factoryNode != null; factoryNode = factoryNode.Next)
                {
                    list.Add((SmartEntity)factoryNode.Entity);
                }
                return;

            case BuildingType.FleetCommand:
                for (FleetCommandNode fleetCommandNode = this.FleetCommandNodeList.Head; fleetCommandNode != null; fleetCommandNode = fleetCommandNode.Next)
                {
                    list.Add((SmartEntity)fleetCommandNode.Entity);
                }
                return;

            case BuildingType.HeroMobilizer:
                for (TacticalCommandNode tacticalCommandNode = this.TacticalCommandNodeList.Head; tacticalCommandNode != null; tacticalCommandNode = tacticalCommandNode.Next)
                {
                    list.Add((SmartEntity)tacticalCommandNode.Entity);
                }
                return;

            case BuildingType.ChampionPlatform:
                for (ChampionPlatformNode championPlatformNode = this.ChampionPlatformNodeList.Head; championPlatformNode != null; championPlatformNode = championPlatformNode.Next)
                {
                    list.Add((SmartEntity)championPlatformNode.Entity);
                }
                return;

            case BuildingType.Housing:
                for (HousingNode housingNode = this.HousingNodeList.Head; housingNode != null; housingNode = housingNode.Next)
                {
                    list.Add((SmartEntity)housingNode.Entity);
                }
                return;

            case BuildingType.Squad:
                for (SquadBuildingNode squadBuildingNode = this.SquadBuildingNodeList.Head; squadBuildingNode != null; squadBuildingNode = squadBuildingNode.Next)
                {
                    list.Add((SmartEntity)squadBuildingNode.Entity);
                }
                return;

            case BuildingType.Starport:
                for (StarportNode starportNode = this.StarportNodeList.Head; starportNode != null; starportNode = starportNode.Next)
                {
                    list.Add((SmartEntity)starportNode.Entity);
                }
                return;

            case BuildingType.DroidHut:
                for (DroidHutNode droidHutNode = this.DroidHutNodeList.Head; droidHutNode != null; droidHutNode = droidHutNode.Next)
                {
                    list.Add((SmartEntity)droidHutNode.Entity);
                }
                return;

            case BuildingType.Wall:
                for (WallNode wallNode = this.WallNodeList.Head; wallNode != null; wallNode = wallNode.Next)
                {
                    list.Add((SmartEntity)wallNode.Entity);
                }
                return;

            case BuildingType.Turret:
                for (TurretBuildingNode turretBuildingNode = this.TurretBuildingNodeList.Head; turretBuildingNode != null; turretBuildingNode = turretBuildingNode.Next)
                {
                    list.Add((SmartEntity)turretBuildingNode.Entity);
                }
                return;

            case BuildingType.TroopResearch:
                for (OffenseLabNode offenseLabNode = this.OffenseLabNodeList.Head; offenseLabNode != null; offenseLabNode = offenseLabNode.Next)
                {
                    list.Add((SmartEntity)offenseLabNode.Entity);
                }
                return;

            case BuildingType.DefenseResearch:
                for (DefenseLabNode defenseLabNode = this.DefenseLabNodeList.Head; defenseLabNode != null; defenseLabNode = defenseLabNode.Next)
                {
                    list.Add((SmartEntity)defenseLabNode.Entity);
                }
                return;

            case BuildingType.Resource:
                for (GeneratorNode generatorNode = this.GeneratorNodeList.Head; generatorNode != null; generatorNode = generatorNode.Next)
                {
                    list.Add((SmartEntity)generatorNode.Entity);
                }
                return;

            case BuildingType.Storage:
                for (StorageNode storageNode = this.StorageNodeList.Head; storageNode != null; storageNode = storageNode.Next)
                {
                    list.Add((SmartEntity)storageNode.Entity);
                }
                return;

            case BuildingType.ShieldGenerator:
                for (ShieldGeneratorNode shieldGeneratorNode = this.ShieldGeneratorNodeList.Head; shieldGeneratorNode != null; shieldGeneratorNode = shieldGeneratorNode.Next)
                {
                    list.Add((SmartEntity)shieldGeneratorNode.Entity);
                }
                return;

            case BuildingType.Clearable:
                for (ClearableNode clearableNode = this.ClearableNodeList.Head; clearableNode != null; clearableNode = clearableNode.Next)
                {
                    list.Add((SmartEntity)clearableNode.Entity);
                }
                return;

            case BuildingType.Trap:
                for (TrapNode trapNode = this.TrapNodeList.Head; trapNode != null; trapNode = trapNode.Next)
                {
                    list.Add((SmartEntity)trapNode.Entity);
                }
                return;

            case BuildingType.Cantina:
                for (CantinaNode cantinaNode = this.CantinaNodeList.Head; cantinaNode != null; cantinaNode = cantinaNode.Next)
                {
                    list.Add((SmartEntity)cantinaNode.Entity);
                }
                return;

            case BuildingType.NavigationCenter:
                for (NavigationCenterNode navigationCenterNode = this.NavigationCenterNodeList.Head; navigationCenterNode != null; navigationCenterNode = navigationCenterNode.Next)
                {
                    list.Add((SmartEntity)navigationCenterNode.Entity);
                }
                return;

            case BuildingType.ScoutTower:
                for (ScoutTowerNode scoutTowerNode = this.ScoutTowerNodeList.Head; scoutTowerNode != null; scoutTowerNode = scoutTowerNode.Next)
                {
                    list.Add((SmartEntity)scoutTowerNode.Entity);
                }
                return;

            case BuildingType.Armory:
                for (ArmoryNode armoryNode = this.ArmoryNodeList.Head; armoryNode != null; armoryNode = armoryNode.Next)
                {
                    list.Add((SmartEntity)armoryNode.Entity);
                }
                return;
            }
            Service.Logger.Warn("Unknown building type " + type);
        }