Example #1
0
 public void Start()
 {
     using (ClientTaskQueue = new MessageQueue <ClientTask>())
     {
         SetupHostConnection();
         GetParameters();
         while (!Exit)
         {
             var task = ClientTaskQueue.GetMessageOrTimeout(MillisecondsToWait);
             if (task != null)
             {
                 CurrentTask = task;
                 InitializeParameters(task);
                 MainClient.Start();
                 task.Result = RetrieveValue == null ? float.NaN : RetrieveValue();
                 ToHost.SendCustomMessage(task, ResultChannel);
                 if (ClientTaskQueue.Count == 0)
                 {
                     ToHost.SendCustomMessage(null, RequestJobChannel);
                 }
                 CurrentTask = null;
                 GC.Collect();
             }
             else
             {
                 ToHost.SendCustomMessage(null, RequestJobChannel);
             }
         }
     }
 }
Example #2
0
 private void InitializeParameters(ClientTask task)
 {
     for (int i = 0; i < task.ParameterValues.Length && i < this.Parameters.Length; i++)
     {
         for (int j = 0; j < this.Parameters[i].Names.Length; j++)
         {
             AssignValue(this.Parameters[i].Names[j], task.ParameterValues[i]);
         }
     }
 }
Example #3
0
 private void CreateClientTask(Job job)
 {
     CurrentTask = new ClientTask()
     {
         Generation      = -1,
         Index           = -1,
         ParameterValues = (from param in job.Parameters
                            select param.Current).ToArray(),
         Result = float.NaN
     };
 }
Example #4
0
        private void InitializeParameters(ClientTask task)
        {
            string error = null;

            for (int i = 0; i < task.ParameterValues.Length && i < Parameters.Length; i++)
            {
                for (int j = 0; j < Parameters[i].Names.Length; j++)
                {
                    if (
                        !Functions.ModelSystemReflection.AssignValue(XtmfConfig, ClientStructure, Parameters[i].Names[j],
                                                                     task.ParameterValues[i].ToString(CultureInfo.InvariantCulture), ref error))
                    {
                        throw new XTMFRuntimeException(this, $"In '{Name}' we were unable to assign a parameter!\r\n{error}");
                    }
                }
            }
        }
Example #5
0
 private void SetupHostConnection()
 {
     // The logic to send data
     ToHost.RegisterCustomSender(SendParameterDefinitions, (data, stream) =>
     {
         // do nothing, this will just request the parameters
     });
     ToHost.RegisterCustomSender(RequestJobChannel, (data, stream) =>
     {
         // do nothing, this will just request a new job
     });
     ToHost.RegisterCustomSender(ResultChannel, (data, stream) =>
     {
         var job = data as ClientTask;
         if (job == null)
         {
             throw new XTMFRuntimeException(this, $"In {Name} we were given a task that was not a job!");
         }
         BinaryWriter writer = new BinaryWriter(stream);
         writer.Write(job.Generation);
         writer.Write(job.Index);
         writer.Write(job.Result);
         writer.Flush();
     });
     //The logic to receive data
     ToHost.RegisterCustomReceiver(RequestJobChannel, (stream) =>
     {
         BinaryReader reader = new BinaryReader(stream);
         ClientTask newTask  = new ClientTask()
         {
             Generation      = reader.ReadInt32(),
             Index           = reader.ReadInt32(),
             ParameterValues = new float[reader.ReadInt32()]
         };
         for (int i = 0; i < newTask.ParameterValues.Length; i++)
         {
             newTask.ParameterValues[i] = reader.ReadSingle();
         }
         ClientTaskQueue.Add(newTask);
         return(null);
     });
     ToHost.RegisterCustomReceiver(SendParameterDefinitions, (stream) =>
     {
         var parameters         = new List <ParameterSetting>();
         BinaryReader reader    = new BinaryReader(stream);
         var numberOfParameters = reader.ReadInt32();
         for (int i = 0; i < numberOfParameters; i++)
         {
             string[] names = new string[reader.ReadInt32()];
             for (int j = 0; j < names.Length; j++)
             {
                 names[j] = reader.ReadString();
             }
             parameters.Add(new ParameterSetting()
             {
                 Current = 0f,
                 Names   = names,
                 Minimum = 0f,
                 Maximum = 0f
             });
         }
         Parameters = parameters.ToArray();
         return(null);
     });
 }
Example #6
0
 private void SetupHostConnection()
 {
     // The logic to send data
     this.ToHost.RegisterCustomSender( this.SendParameterDefinitions, (data, stream) =>
         {
             // do nothing, this will just request the parameters
         } );
     this.ToHost.RegisterCustomSender( this.RequestJobChannel, (data, stream) =>
         {
             // do nothing, this will just request a new job
         } );
     this.ToHost.RegisterCustomSender( this.ResultChannel, (data, stream) =>
         {
             var job = data as ClientTask;
             BinaryWriter writer = new BinaryWriter( stream );
             writer.Write( job.Generation );
             writer.Write( job.Index );
             writer.Write( job.Result );
             writer.Flush();
             writer = null;
         } );
     //The logic to receive data
     this.ToHost.RegisterCustomReceiver( this.RequestJobChannel, (stream) =>
         {
             BinaryReader reader = new BinaryReader( stream );
             ClientTask newTask = new ClientTask();
             newTask.Generation = reader.ReadInt32();
             newTask.Index = reader.ReadInt32();
             newTask.ParameterValues = new float[reader.ReadInt32()];
             for ( int i = 0; i < newTask.ParameterValues.Length; i++ )
             {
                 newTask.ParameterValues[i] = reader.ReadSingle();
             }
             reader = null;
             this.ClientTaskQueue.Add( newTask );
             return null;
         } );
     this.ToHost.RegisterCustomReceiver( this.SendParameterDefinitions, (stream) =>
         {
             var parameters = new List<ParameterSetting>();
             BinaryReader reader = new BinaryReader( stream );
             var numberOfParameters = reader.ReadInt32();
             for ( int i = 0; i < numberOfParameters; i++ )
             {
                 string[] names = new string[reader.ReadInt32()];
                 for ( int j = 0; j < names.Length; j++ )
                 {
                     names[j] = reader.ReadString();
                 }
                 parameters.Add( new ParameterSetting()
                 {
                     Current = 0f,
                     Names = names,
                     Minimum = 0f,
                     Maximum = 0f
                 } );
             }
             this.Parameters = parameters.ToArray();
             return null;
         } );
 }
Example #7
0
 private void InitializeParameters(ClientTask task)
 {
     for ( int i = 0; i < task.ParameterValues.Length && i < this.Parameters.Length; i++ )
     {
         for ( int j = 0; j < this.Parameters[i].Names.Length; j++ )
         {
             AssignValue( this.Parameters[i].Names[j], task.ParameterValues[i] );
         }
     }
 }