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); } } } }
/// <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); }