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();
                    }
                }
            });
        }
        public static void Run()
        {
            Init();

            if (WorkerContainer == null || !WorkerContainer.Any())
            {
                throw new Exception("there are not any worker");
            }

            while (true)
            {
                var job = QueuesContainer.DequeueJob();
                if (job != null)
                {
                    #region find worker
                    var worker = new KeyValuePair <WorkerIdentity, ProcessJob>();
                    while (worker.Key == null)
                    {
                        worker = WorkerContainer
                                 .Where(x => !x.Key.IsBusy && x.Key.Category == job.Category)
                                 .FirstOrDefault();

                        if (worker.Key == null)
                        {
                            worker = WorkerContainer
                                     .Where(x => !x.Key.IsBusy)
                                     .FirstOrDefault();
                        }
                    }
                    #endregion
                    if (worker.Key != null)
                    {
                        worker.Key.IsBusy = true;
                        var doing = worker.Value.Invoke(job);
                        _ = doing.ContinueWith(t =>
                        {
                            if (t.IsCompleted)
                            {
                                worker = DoneJob(job, worker);
                            }
                            if (t.IsFaulted)
                            {
                                #region retry
                                try
                                {
                                    Task.Delay(Config.Settings.WorkersConfig.RetryTime).Wait();
                                    t.Wait();
                                    worker = DoneJob(job, worker);
                                }
                                catch
                                {
                                    ErrorJob(job, worker);
                                }
                                #endregion
                            }
                        });
                    }
                }
            }
        }
 private static KeyValuePair <WorkerIdentity, ProcessJob> DoneJob(Job job, KeyValuePair <WorkerIdentity, ProcessJob> worker)
 {
     QueuesContainer.UnLock(job.Entity);
     worker.Key.IsBusy = false;
     LogDone(job);
     return(worker);
 }
 public static void Run()
 {
     while (true)
     {
         if (JobsCache.Count() > 0)
         {
             var job = JobsCache.Dequeue();
             if (job != null)
             {
                 QueuesContainer.Enqueue(job);
             }
         }
     }
 }
Example #5
0
    /// <summary>
    /// Loads Person controller
    /// </summary>
    /// <param name="pData"></param>
    void LoadFromFile(PersonData pData)
    {
        //person controller vars
        Difficulty = pData.PersonControllerSaveLoad.Difficulty;

        UnivCounter = pData.PersonControllerSaveLoad.UnivCounter;
        Queues      = pData.PersonControllerSaveLoad.Queues;
        GenderLast  = pData.PersonControllerSaveLoad.GenderLast;

        Locked           = pData.PersonControllerSaveLoad.Locked;
        BuildersManager1 = pData.PersonControllerSaveLoad.BuildersManager;

        RoutesCache1 = pData.PersonControllerSaveLoad.RoutesCache;
        RoutesCache1.LoadTheSave();

        //OnSystemNow1 = pData.PersonControllerSaveLoad.OnSystemNow1;
        EmigrateController1 = pData.PersonControllerSaveLoad.EmigrateController1;
        EmigrateController1.RecreateEmigratesGC();

        IsAPersonHomeLessNow = pData.PersonControllerSaveLoad.IsAPersonHomeLessNow;

        Program.MyScreen1.TownName = pData.PersonControllerSaveLoad.TownName;

        //BulletinWindow.SubBulletinProduction1 = pData.PersonControllerSaveLoad.SubBulletinProduction;
        //BulletinWindow.SubBulletinFinance1 = pData.PersonControllerSaveLoad.SubBulletinFinance;


        Program.gameScene.QuestManager = pData.PersonControllerSaveLoad.QuestManager;
        Program.gameScene.QuestManager.JustLoadedShowCurrent();

        //persons
        for (int i = 0; i < pData.All.Count; i++)
        {
            Person t = Person.CreatePersonFromFile(pData.All[i]);
            MouseClick += t.MouseClickHandler;

            BuildingPot.InputU.BuildPlaced   += t.BuildPlacedHandler;
            Program.MouseListener.Demolished += t.BuildWasDemolished;


            All.Add(t);
            _allGC.Add(t.MyId, t);
        }

        //Program.MyScreen1.LoadData(pData);
    }
 private static void ErrorJob(Job job, KeyValuePair <WorkerIdentity, ProcessJob> worker)
 {
     QueuesContainer.UnLock(job.Entity);
     worker.Key.IsBusy = false;
     LogError(job);
 }