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); } } } }
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]); } } }
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 }; }
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}"); } } } }
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); }); }
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; } ); }
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] ); } } }