예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
        }