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();
                    }
                }
            });
        }
Example #2
0
        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();
     });
 }
Example #4
0
 public void RemoveWorker(WorkerAgent workerAgent)
 {
     if (AvailableWorkers.Contains(workerAgent) == true)
     {
         AvailableWorkers.Remove(workerAgent);
     }
 }
Example #5
0
 public void AddWorker(WorkerAgent workerAgent)
 {
     if (AvailableWorkers.Contains(workerAgent) == false)
     {
         AvailableWorkers.Add(workerAgent);
     }
 }
Example #6
0
    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);
    }
Example #7
0
 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;
     }
 }
Example #8
0
    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);
    }
Example #9
0
        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();
        }
Example #10
0
    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();
            }
        }
    }
Example #11
0
    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);
        }
Example #13
0
    public override void Run()
    {
        var logic = new WorkerAgent();

        logic.Go(false);
    }
Example #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="WorkerStorage"/> class.
 /// </summary>
 public WorkerStorage(WorkerAgent agent)
 {
     this.agent = agent;
     agent.SetDisplayText(Balance.ToString());
 }