Exemplo n.º 1
0
 /// <summary>Called by a runner process to signal end of job</summary>
 /// <param name="sender">The sender</param>
 /// <param name="args">The command arguments</param>
 private void OnEndJob(object sender, SocketServer.CommandArgs args)
 {
     try
     {
         EndJobArguments arguments            = args.obj as EndJobArguments;
         JobCompleteArgs jobCompleteArguments = new JobCompleteArgs();
         jobCompleteArguments.job = runningJobs[arguments.key];
         if (arguments.errorMessage != null)
         {
             jobCompleteArguments.exceptionThrowByJob = new Exception(arguments.errorMessage);
         }
         lock (this)
         {
             if (JobCompleted != null)
             {
                 JobCompleted.Invoke(this, jobCompleteArguments);
             }
             runningJobs.Remove(arguments.key);
         }
         server.Send(args.socket, "OK");
     }
     catch (Exception err)
     {
         errors += err.ToString() + Environment.NewLine;
     }
 }
Exemplo n.º 2
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;
            }
        }
Exemplo 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 OnError(object sender, SocketServer.CommandArgs args)
        {
            string errorMessage = args.obj as string;

            internalExceptions.Add(new Exception(errorMessage));
            server.Send(args.socket, "OK");
        }
Exemplo n.º 4
0
        /// <summary>Called by a runner process to send its output data.</summary>
        /// <param name="sender">The sender</param>
        /// <param name="args">The command arguments</param>
        private void OnTransferData(object sender, SocketServer.CommandArgs args)
        {
            try
            {
                if (args.obj is TransferReportData)
                {
                    var transferData  = args.obj as TransferReportData;
                    var runSimulation = runningJobs[transferData.key] as RunSimulation;
                    runSimulation.DataStore.Writer.WriteTable(transferData.data);
                }
                else if (args.obj is TransferDataTable)
                {
                    var transferData  = args.obj as TransferDataTable;
                    var runSimulation = runningJobs[transferData.key] as RunSimulation;
                    runSimulation.DataStore.Writer.WriteTable(transferData.data);
                }
                else
                {
                    throw new Exception("Invalid socket transfer method.");
                }

                server.Send(args.socket, "OK");
            }
            catch (Exception err)
            {
                errors += err.ToString() + Environment.NewLine;
            }
        }
Exemplo 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 (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);
            }
        }
Exemplo 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 (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);
            }
        }
Exemplo n.º 7
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);
            }
        }
Exemplo n.º 8
0
 /// <summary>Called by the client to send its output data.</summary>
 /// <param name="sender">The sender</param>
 /// <param name="args">The command arguments</param>
 private void OnTransferData(object sender, SocketServer.CommandArgs args)
 {
     lock (DataStore.TablesToWrite)
     {
         List <ReportTable> arguments = args.obj as List <ReportTable>;
         DataStore.TablesToWrite.AddRange(arguments);
     }
     server.Send(args.socket, "OK");
 }
Exemplo n.º 9
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 OnEndJob(object sender, SocketServer.CommandArgs args)
        {
            EndJobArguments arguments = args.obj as EndJobArguments;

            lock (this)
            {
                SetJobCompleted(arguments.key, arguments.errorMessage);
            }
            server.Send(args.socket, "OK");
        }
Exemplo n.º 10
0
 /// <summary>Called by a runner process to send its output data.</summary>
 /// <param name="sender">The sender</param>
 /// <param name="args">The command arguments</param>
 private void OnTransferData(object sender, SocketServer.CommandArgs args)
 {
     try
     {
         List <TransferRowInTable> rows = args.obj as List <TransferRowInTable>;
         foreach (TransferRowInTable row in rows)
         {
             storageWriter.WriteRow(row.simulationName, row.tableName,
                                    row.columnNames, row.columnUnits, row.values);
         }
         server.Send(args.socket, "OK");
     }
     catch (Exception err)
     {
         errors += err.ToString() + Environment.NewLine;
     }
 }