예제 #1
0
파일: WorkQueue.cs 프로젝트: saleph/shapp
 public static void StopWorkers()
 {
     foreach (var worker in workers.Keys)
     {
         CommunicatorWithChildren.SendToChild(worker, new StopWorker());
     }
     workers.Clear();
     freeWorkersQueue.Clear();
     socketToJid.Clear();
 }
예제 #2
0
파일: WorkQueue.cs 프로젝트: saleph/shapp
 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;
     }
 }
예제 #3
0
파일: WorkQueue.cs 프로젝트: saleph/shapp
 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();
     };
 }