public static void StartHandling() { var done = false; while (!done) { foreach (var data in ClientList) { var clientData = data; var msg = data.RecieveMessage(); if (msg == null) { continue; } if (msg.Text.Contains("Request")) { var job = JobPool.GetJob(); if (job != null) { data.SendMessage(job.ToString()); Logger.LogJobSent(job, clientData); } else { data.SendMessage("Done"); Logger.LogPostingFinished(); } var ind = msg.Text.IndexOf("Request", StringComparison.Ordinal); var coreStr = msg.Text.Substring(0, ind); try { int nCore = Convert.ToInt16(coreStr); if (clientData.NumCores != nCore) { clientData.NumCores = nCore; Logger.LogNumCoresChanged(clientData); } } catch { // ignored } msg.Text = msg.Text.Remove(0, ind + 7); } if (string.IsNullOrEmpty(msg.Text)) { continue; } SingleRunJob thejob; IdaPoint pnt; done = JobManager.SetResultString(msg.Text, out thejob, out pnt); Logger.LogResultRecieved(thejob, pnt); } } }
public static void PopulatePool() { foreach (var idaJob in IdaJobPool) { idaJob.Start(); } foreach (var idaJob in IdaJobPool) { JobPool.AddJobs(idaJob.GetNextJobs(MaxPostedIms)); } }
public static bool SetResultString(string result, out SingleRunJob job, out IdaPoint pnt) { // model record im edp endTime dvrgFlg job = null; pnt = null; var resList = result.Split(' ').ToList(); if (resList.Count < 2) { return(false); } var model = resList[0]; var rec = resList[1]; var im = Convert.ToDouble(resList[2]); job = JobPool.GetJob(model, rec, im); if (job.TheStatus != SingleRunJob.Status.Cancelled) { job.TheStatus = SingleRunJob.Status.Recieved; } else { job.TheStatus = SingleRunJob.Status.CancelRecieved; } pnt = new IdaPoint { Im = Convert.ToDouble(resList[2]), Edp = Convert.ToDouble(resList[3]), AnalysisEndTime = Convert.ToDouble(resList[4]), DivergFlag = Convert.ToInt16(resList[5]) != 0 }; IdaJob toDelete = null; var jobList = IdaJobPool.Where(idajob => idajob.Model == model && idajob.Record == rec).ToArray(); if (!jobList.Any()) { throw new Exception("IDAJob not found"); } var idaJob = jobList.ElementAt(0); bool cancel; bool deleteMe; idaJob.SetResult(job, pnt, out cancel, out deleteMe); if (cancel) { JobPool.CancelJobs(idaJob); } if (deleteMe) { toDelete = idaJob; Logger.LogIdaFinished(idaJob); } if (toDelete != null) { IdaJobPool.Remove(toDelete); if (LoadedJobsPool.Count == 0) { return(IdaJobPool.Count == 0); } IdaJobPool.Add(LoadedJobsPool[0]); LoadedJobsPool.RemoveAt(0); } return(IdaJobPool.Count == 0); }