public static void StopWorkers() { foreach (var worker in workers.Keys) { CommunicatorWithChildren.SendToChild(worker, new StopWorker()); } workers.Clear(); freeWorkersQueue.Clear(); socketToJid.Clear(); }
private static void DelegateTasksToWorkers() { while (freeWorkersQueue.Count > 0) { if (tasksQueue.Count == 0) { return; } var task = tasksQueue.Dequeue(); var worker = freeWorkersQueue.Dequeue(); CommunicatorWithChildren.SendToChild(worker, task); workers[worker].IsBusy = true; workers[worker].TaskIdLastOrCurrentlyExecuted = task.Id; workers[worker].TaskNameLastOrCurrentlyExecuted = task.Name; } }
private static void InjectCallbacks() { RegisterWorker.OnReceive += (sender, registerWorker) => { C.log.Info("RegisterWorker received"); var jobId = registerWorker.JobId; workers[jobId] = new WorkerStatus(); freeWorkersQueue.Enqueue(jobId); socketToJid[sender] = jobId; CommunicatorWithChildren.SendToChild(jobId, new RegisterWorkerConfirm()); DelegateTasksToWorkers(); }; QueueTaskReturnValue.OnReceive += (sender, returnValue) => { C.log.Info("QueueTaskReturnValue received"); promises[returnValue.Id].SetResult(returnValue.OutputData); var jid = socketToJid[sender]; freeWorkersQueue.Enqueue(jid); workers[jid].IsBusy = false; DelegateTasksToWorkers(); }; }