private static async Task Monitor() { await Task.Run(() => { Stopwatch sp = new Stopwatch(); sp.Start(); while (true) { if (sp.Elapsed.Seconds == 1) { Console.Clear(); var msg1 = DataProvider.DataProviderAgent.Monitor(); var msg2 = QueuesContainer.Monitor(); var msg3 = WorkerAgent.Monitor(); Console.WriteLine($@" {msg1} {msg2} {msg3}"); sp.Restart(); } } }); }
static void Main(string[] args) { Utils.Init(Case.WORST); Utils.env = new ActressMas.Environment(); #if MERGESORT var masterAgent = new MasterAgent(); var leftAgent = new WorkerAgent(); var rightAgent = new WorkerAgent(); env.Add(leftAgent, Agents.WorkerAgentLeft); leftAgent.Start(); env.Add(rightAgent, Agents.WorkerAgentRight); rightAgent.Start(); env.Add(masterAgent, Agents.MasterAgent); masterAgent.Start(); #elif ENUMERATION for (int i = 0; i < Utils.NoAgents; i++) { var workerAgent = new WorkerAgent(i); env.Add(workerAgent, string.Format("Slave{0:D2}", i)); workerAgent.Start(); } var masterAgent = new MasterAgent(); env.Add(masterAgent, Agents.MasterAgent); masterAgent.Start(); #elif MERGESORTPARALLEL var bidderAgent = new Worker(); Utils.env.Add(bidderAgent, string.Format("Slave{0:D2}", 0)); Utils.agentPool.Add(bidderAgent.Name); bidderAgent.Start(); Thread.Sleep(200); var auctioneerAgent = new MasterAgent(); Utils.env.Add(auctioneerAgent, Agents.MasterAgent); auctioneerAgent.Start(); #else Utils.numAg = 50; Utils.slaveElem = Utils.Source.Length / Utils.numAg; for (int i = 0; i < Utils.numAg; i++) { var workerAgent = new WorkerAgent(i); env.Add(workerAgent, string.Format("Slave{0:D2}", i)); Utils.agentPool.Add(workerAgent.Name); workerAgent.Start(); } Thread.Sleep(1000); var masterAgent = new MasterAgent(); env.Add(masterAgent, Agents.MasterAgent); masterAgent.Start(); #endif Utils.env.WaitAll(); Console.ReadKey(); }
private static async Task RunWorkerAgent() { await Task.Run(() => { WorkerAgent.Run(); }); }
public void RemoveWorker(WorkerAgent workerAgent) { if (AvailableWorkers.Contains(workerAgent) == true) { AvailableWorkers.Remove(workerAgent); } }
public void AddWorker(WorkerAgent workerAgent) { if (AvailableWorkers.Contains(workerAgent) == false) { AvailableWorkers.Add(workerAgent); } }
public int GetAvailableTask(WorkerAgent worker) { for (int i = 0; i < TaskList.Count; i++) { if (TaskList[i].Status == 0 && TaskList[i].CheckIfAvailable()) { TaskList[i].Status = 1; TaskList[i].Claimant = worker; return(i); } } return(-1); }
public void Use(WorkerAgent worker) { Users.Add(worker); if (BuildingType == (int)BuildingNames.Beds) { worker.isResting = true; } else if (BuildingType == (int)BuildingNames.DiningRoom) { worker.isEating = true; } else if (BuildingType == (int)BuildingNames.Pub) { worker.isDrinking = true; } }
public WorkerAgent GetNearestWorker(int x, int y) { Vector3 taskPos = new Vector3(x, -y, 0f); WorkerAgent agent = null; float dist = 99999f; foreach (WorkerAgent worker in AvailableWorkers) { if (Mathf.Abs(Vector3.Distance(worker.transform.position, taskPos)) < dist) { dist = Mathf.Abs(Vector3.Distance(worker.transform.position, taskPos)); agent = worker; } } return(agent); }
static void Main(string[] args) { Utils.Init(Case.WORST); var env = new ActressMas.Environment(); #if MERGESORT var masterAgent = new MasterAgent(); var leftAgent = new WorkerAgent(); var rightAgent = new WorkerAgent(); env.Add(leftAgent, Agents.WorkerAgentLeft); leftAgent.Start(); env.Add(rightAgent, Agents.WorkerAgentRight); rightAgent.Start(); env.Add(masterAgent, Agents.MasterAgent); masterAgent.Start(); #elif ENUMERATION for (int i = 0; i < Utils.NoAgents; i++) { var workerAgent = new WorkerAgent(i); env.Add(workerAgent, string.Format("Slave{0:D2}", i)); workerAgent.Start(); } var masterAgent = new MasterAgent(); env.Add(masterAgent, Agents.MasterAgent); masterAgent.Start(); #else for (int i = 0; i < 2; i++) { var workerAgent = new WorkerAgent(i); env.Add(workerAgent, string.Format("Slave{0:D2}", i)); workerAgent.Start(); } var masterAgent = new MasterAgent(); env.Add(masterAgent, Agents.MasterAgent); masterAgent.Start(); #endif env.WaitAll(); }
public void CreateWorkers(int NoOfWorker, bool isStart = false) { if (isStart || OreAmount >= WorkerCost * NoOfWorker) { for (int i = 0; i < NoOfWorker; i++) { GameObject go = GameObject.Instantiate(WorkerPrefabs[Random.Range(0, WorkerPrefabs.Length)], new Vector3(3f + i, 0f, 0), Quaternion.identity); go.transform.SetParent(this.transform); go.name = "Worker_" + i.ToString(); WorkerAgent worker = go.GetComponent <WorkerAgent>(); Workers.Add(worker); } if (!isStart) { OreAmount -= WorkerCost * NoOfWorker; UI.UpdateStatsUI(); } } }
void AssignTasks() { if (AvailableWorkers.Count < 1) { return; } for (int i = 0; i < TaskList.Count; i++) { if (TaskList[i].Status == 0 && TaskList[i].CheckIfAvailable()) { WorkerAgent agent = GetNearestWorker(TaskList[i].X, TaskList[i].Y); if (agent != null) { TaskList[i].Status = 1; TaskList[i].Claimant = agent; RemoveWorker(agent); TaskList[i].Claimant.AssignTask(i); } } } }
public void Run() { JobsCache.Clear(); var job1 = new Job { MessageId = 10, Category = Category.Express, Entity = Entity.Product0, Payload = "10", SentDate = DateTime.Now }; var job2 = new Job { MessageId = 11, Category = Category.Express, Entity = Entity.Product1, Payload = "11", SentDate = DateTime.Now.AddSeconds(1) }; var job3 = new Job { MessageId = 12, Category = Category.Normal, Entity = Entity.Product2, Payload = "12", SentDate = DateTime.Now.AddSeconds(2) }; var job4 = new Job { MessageId = 30, Category = Category.Express, Entity = Entity.Product3, Payload = "13", SentDate = DateTime.Now.AddSeconds(3) }; Assert.IsNull(JobsCache.Peek()); JobsCache.Enqueue(job1); Assert.IsTrue(JobsCache.Count() == 1); Assert.IsTrue(JobsCache.Peek().ToString() == job1.ToString()); JobsCache.Enqueue(job2); Assert.IsTrue(JobsCache.Count() == 2); Assert.IsFalse(JobsCache.Peek().ToString() == job2.ToString()); Assert.IsTrue(QueuesContainer.Queues.Count == 0); _ = Task.Run(() => JobDispatcherAgent.Run()); while (QueuesContainer.Queues.Count != 2) { } Assert.IsTrue(QueuesContainer.Queues.Count == 2); _ = Task.Run(() => WorkerAgent.Run()); while (WorkerAgent.doneCount != 2) { } Assert.IsTrue(WorkerAgent.doneCount == 2); JobsCache.Enqueue(job3); while (QueuesContainer.Queues.Count != 3) { } Assert.IsTrue(QueuesContainer.Queues.Count == 3); while (WorkerAgent.doneCount != 3) { } Assert.IsTrue(WorkerAgent.doneCount == 3); JobsCache.Enqueue(job4); while (QueuesContainer.Queues.Count != 4) { } Assert.IsTrue(QueuesContainer.Queues.Count == 4); while (WorkerAgent.ErrorList.Count != 1) { } Assert.IsTrue(WorkerAgent.ErrorList.Count == 1); }
public override void Run() { var logic = new WorkerAgent(); logic.Go(false); }
/// <summary> /// Initializes a new instance of the <see cref="WorkerStorage"/> class. /// </summary> public WorkerStorage(WorkerAgent agent) { this.agent = agent; agent.SetDisplayText(Balance.ToString()); }