Ejemplo n.º 1
0
        /// <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;
            }
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 5
0
        /// <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);
            }
        }
Ejemplo n.º 6
0
        /// <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);
            }
        }