public void CreateMachineAgents(FResourceSetupDefinition resourceSetupDefinition) { var resourceSetups = resourceSetupDefinition.ResourceSetup as List <M_ResourceSetup>; // Create Skill based Hub Agent for each Skill of resource // TODO Currently Resource can only have one Skill and discriminator between subskills are made by resourceTool foreach (var resourceSetup in resourceSetups) { var hub = fRequestResources.FirstOrDefault(predicate: x => x.Discriminator == resourceSetup.ResourceSkill.Name && x.ResourceType == FResourceType.Hub); if (hub == null) { var hubAgent = Agent.Context.ActorOf(props: Hub.Props(actorPaths: Agent.ActorPaths , time: Agent.CurrentTime , simtype: SimulationType , debug: Agent.DebugThis , principal: Agent.Context.Self) , name: "Hub(" + resourceSetup.ResourceSkill.Name + ")"); //Agent.Send(BasicInstruction.Initialize.Create(Agent.Context.Self, HubBehaviour.Get(machine.MachineGroup.Name))); hub = new FRequestResource(discriminator: resourceSetup.ResourceSkill.Name, resourceType: FResourceType.Hub, actorRef: hubAgent); fRequestResources.Add(item: hub); } } var resource = resourceSetups.FirstOrDefault().Resource as M_Resource; // Create resource If Required var resourceAgent = Agent.Context.ActorOf(props: Resource.Props(actorPaths: Agent.ActorPaths , resource: resource , time: Agent.CurrentTime , debug: Agent.DebugThis // TODO : Handle 1 resource in multiply hub agents , principal: fRequestResources.FirstOrDefault(predicate: x => x.Discriminator == resource.ResourceSetups.First().ResourceSkill.Name && x.ResourceType == FResourceType.Hub).actorRef) , name: ("Machine(" + resource.Name + ")").ToActorName()); Agent.Send(instruction: BasicInstruction.Initialize .Create(target: resourceAgent , message: ResourceAgent.Behaviour .Factory.Get(simType: SimulationType , workTimeGenerator: resourceSetupDefinition.WorkTimeGenerator as WorkTimeGenerator , resourceId: resource.Id , toolManager: new ToolManager(resourceSetups: resourceSetups)))); }
/// <summary> /// Creates ResourcesAgents based on current Model and add them to the SimulationContext /// </summary> /// <param name="configuration">Environment.Configuration</param> private void CreateResourceAgents(Configuration configuration) { WorkTimeGenerator randomWorkTime = WorkTimeGenerator.Create(configuration: configuration); var setups = _dBContext.ResourceSetups.Include(navigationPropertyPath: m => m.Resource) .Include(navigationPropertyPath: r => r.ResourceSkill) .ThenInclude(s => s.ResourceSetups) .Include(navigationPropertyPath: t => t.ResourceTool) .AsNoTracking().ToListAsync().Result; var resourceList = _dBContext.Resources.ToList(); foreach (var resource in resourceList) { var resourceSetups = setups.Where(predicate: x => x.ResourceId == resource.Id).ToList(); var resourceSetupDefinition = new FResourceSetupDefinition(workTimeGenerator: randomWorkTime, resourceSetup: resourceSetups, debug: _debugAgents); _simulation.SimulationContext.Tell(message: Directory.Instruction .CreateMachineAgents .Create(message: resourceSetupDefinition, target: ActorPaths.HubDirectory.Ref) , sender: ActorPaths.HubDirectory.Ref); } }
public static CreateMachineAgents Create(FResourceSetupDefinition message, IActorRef target) { return(new CreateMachineAgents(message: message, target: target)); }