/// <summary>Called by a runner process to get the next job to run.</summary> /// <param name="sender">The sender</param> /// <param name="args">The command arguments</param> private void OnGetJob(object sender, SocketServer.CommandArgs args) { try { IRunnable jobToRun; Guid jobKey; lock (this) { jobToRun = jobs.GetNextJobToRun(); jobKey = Guid.NewGuid(); runningJobs.Add(jobKey, jobToRun); } if (jobToRun == null) { server.Send(args.socket, "NULL"); } else { RunSimulation runner = jobToRun as RunSimulation; IModel savedParent = runner.SetParentOfSimulation(null); GetJobReturnData returnData = new GetJobReturnData(); returnData.key = jobKey; returnData.job = runner; server.Send(args.socket, returnData); runner.SetParentOfSimulation(savedParent); } } catch (Exception err) { errors += err.ToString() + Environment.NewLine; } }
/// <summary>Called by the client when a socket fails to get a job</summary> /// <param name="sender">The sender</param> /// <param name="args">The command arguments</param> private void OnGetJobFailed(object sender, SocketServer.CommandArgs args) { Job jobToRun = null; lock (this) { if (jobs.Count > 0) { jobToRun = jobs[0]; jobs.RemoveAt(0); } } if (jobToRun == null) { server.Send(args.socket, "NULL"); } else { GetJobReturnData returnData = new GetJobReturnData(); returnData.key = jobToRun.Key; returnData.job = jobToRun.RunnableJob; server.Send(args.socket, returnData); } }
/// <summary>Called by the client to get the next job to run.</summary> /// <param name="sender">The sender</param> /// <param name="args">The command arguments</param> private void OnGetJob(object sender, SocketServer.CommandArgs args) { Job jobToRun = null; lock (this) { // Free up memory be removing all child models on completed jobs. // This helps the garbage collector when there are many jobs. foreach (JobManager.Job job in jobs) { if (job.IsCompleted && job.RunnableJob is Simulation) { (job.RunnableJob as Simulation).Children.Clear(); } } jobToRun = jobs.Find(job => !job.IsRunning && !job.isCompleted && typeof(Simulation).IsAssignableFrom(job.RunnableJob.GetType())); if (jobToRun != null) { jobToRun.IsRunning = true; } } if (jobToRun == null) { server.Send(args.socket, "NULL"); } else { GetJobReturnData returnData = new GetJobReturnData(); returnData.key = jobToRun.Key; returnData.job = jobToRun.RunnableJob; server.Send(args.socket, returnData); } }
/// <summary>Called by the client to get the next job to run.</summary> /// <param name="sender">The sender</param> /// <param name="args">The command arguments</param> private void OnGetJob(object sender, SocketServer.CommandArgs args) { Job jobToRun = null; lock (jobs) { jobToRun = jobs.Find(job => !job.IsRunning && !job.isCompleted && typeof(Simulation).IsAssignableFrom(job.RunnableJob.GetType())); if (jobToRun != null) { jobToRun.IsRunning = true; } } if (jobToRun == null) { server.Send(args.socket, "NULL"); } else { GetJobReturnData returnData = new GetJobReturnData(); returnData.key = jobToRun.Key; returnData.job = jobToRun.RunnableJob; server.Send(args.socket, returnData); } }
/// <summary>Called by the client when a socket fails to get a job</summary> /// <param name="sender">The sender</param> /// <param name="args">The command arguments</param> private void OnGetJobFailed(object sender, SocketServer.CommandArgs args) { Job jobToRun = null; lock (jobs) { if (jobs.Count > 0) { jobToRun = jobs[0]; jobs.RemoveAt(0); } } if (jobToRun == null) server.Send(args.socket, "NULL"); else { GetJobReturnData returnData = new GetJobReturnData(); returnData.key = jobToRun.Key; returnData.job = jobToRun.RunnableJob; server.Send(args.socket, returnData); } }
/// <summary>Called by the client to get the next job to run.</summary> /// <param name="sender">The sender</param> /// <param name="args">The command arguments</param> private void OnGetJob(object sender, SocketServer.CommandArgs args) { Job jobToRun = null; lock (jobs) { jobToRun = jobs.Find(job => !job.IsRunning && !job.isCompleted && typeof(Simulation).IsAssignableFrom(job.RunnableJob.GetType())); if (jobToRun != null) { jobToRun.IsRunning = true; } } if (jobToRun == null) server.Send(args.socket, "NULL"); else { GetJobReturnData returnData = new GetJobReturnData(); returnData.key = jobToRun.Key; returnData.job = jobToRun.RunnableJob; server.Send(args.socket, returnData); } }