Changeset 6470 for trunk/sources/HeuristicLab.Problems.ExternalEvaluation
- Timestamp:
- 06/22/11 17:11:27 (14 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationProcessChannel.cs
r5445 r6470 33 33 public class EvaluationProcessChannel : EvaluationChannel { 34 34 35 #region Fields & Properties 35 36 private Process process; 36 37 [Storable] … … 40 41 set { 41 42 if (IsInitialized) throw new InvalidOperationException(Name + ": Cannot change the executable path as the process has already been started."); 42 string oldExecutable = executable;43 if (value == executable) return; 43 44 executable = value; 44 if (!oldExecutable.Equals(executable)) OnExecutableChanged(); 45 UpdateName(); 46 OnExecutableChanged(); 45 47 } 46 48 } … … 51 53 set { 52 54 if (IsInitialized) throw new InvalidOperationException(Name + ": Cannot change the arguments as the process has already been started."); 53 string oldArguments = arguments;55 if (value == arguments) return; 54 56 arguments = value; 55 if (!oldArguments.Equals(arguments)) OnArgumentsChanged(); 57 UpdateName(); 58 OnArgumentsChanged(); 56 59 } 57 60 } 58 61 private EvaluationStreamChannel streamingChannel; 62 #endregion 59 63 64 #region Construction & Cloning 60 65 [StorableConstructor] 61 66 protected EvaluationProcessChannel(bool deserializing) : base(deserializing) { } … … 64 69 executable = original.executable; 65 70 arguments = original.arguments; 71 UpdateName(); 66 72 } 67 73 public override IDeepCloneable Clone(Cloner cloner) { … … 74 80 this.executable = executable; 75 81 this.arguments = arguments; 82 UpdateName(); 76 83 } 84 [StorableHook(HookType.AfterDeserialization)] 85 private void AfterDeserialization() { 86 UpdateName(); 87 } 88 #endregion 77 89 78 90 #region IExternalEvaluationChannel Members 79 80 91 public override void Open() { 81 92 if (!String.IsNullOrEmpty(executable.Trim())) { … … 175 186 } 176 187 #endregion 188 189 #region Auxiliary Methods 190 private void UpdateName() { 191 name = string.Format("ProcessChannel {0} {1}", Path.GetFileNameWithoutExtension(executable), arguments); 192 OnNameChanged(); 193 } 194 #endregion 177 195 } 178 196 } -
trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationServiceClient.cs
r5445 r6470 31 31 [StorableClass] 32 32 public class EvaluationServiceClient : ParameterizedNamedItem, IEvaluationServiceClient { 33 33 34 public override bool CanChangeName { get { return false; } } 34 35 public override bool CanChangeDescription { get { return false; } } 35 36 37 #region Parameters 36 38 public IValueParameter<IEvaluationChannel> ChannelParameter { 37 39 get { return (IValueParameter<IEvaluationChannel>)Parameters["Channel"]; } … … 44 46 get { return ChannelParameter.Value; } 45 47 } 48 #endregion 46 49 47 50 51 #region Construction & Cloning 48 52 [StorableConstructor] 49 53 protected EvaluationServiceClient(bool deserializing) : base(deserializing) { } 50 protected EvaluationServiceClient(EvaluationServiceClient original, Cloner cloner) : base(original, cloner) { } 51 public override IDeepCloneable Clone(Cloner cloner) { 52 return new EvaluationServiceClient(this, cloner); 53 } 54 protected EvaluationServiceClient(EvaluationServiceClient original, Cloner cloner) : base(original, cloner) { 55 RegisterEvents(); 56 } 54 57 public EvaluationServiceClient() 55 58 : base() { 56 59 Parameters.Add(new ValueParameter<IEvaluationChannel>("Channel", "The channel over which to call the remote function.")); 57 60 Parameters.Add(new ValueParameter<IntValue>("Retry", "How many times the client should retry obtaining a quality in case there is an exception. Note that it immediately aborts when the channel cannot be opened.", new IntValue(10))); 61 RegisterEvents(); 58 62 } 63 public override IDeepCloneable Clone(Cloner cloner) { 64 return new EvaluationServiceClient(this, cloner); 65 } 66 [StorableHook(HookType.AfterDeserialization)] 67 private void AfterDeserialization() { 68 ChannelParameter_ValueChanged(this, EventArgs.Empty); 69 RegisterEvents(); 70 } 71 #endregion 59 72 60 73 #region IEvaluationServiceClient Members 61 62 74 public QualityMessage Evaluate(SolutionMessage solution) { 63 75 int tries = 0, maxTries = RetryParameter.Value.Value; … … 103 115 System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ReceiveAsync), callback); 104 116 } 105 106 117 #endregion 107 118 119 #region Auxiliary Methods 108 120 private void CheckAndOpenChannel() { 109 121 if (Channel == null) throw new InvalidOperationException(Name + ": The channel is not defined."); … … 126 138 ((Action<QualityMessage>)callback).Invoke(message); 127 139 } 140 141 private void RegisterEvents() { 142 ChannelParameter.ValueChanged += new EventHandler(ChannelParameter_ValueChanged); 143 } 144 145 void ChannelParameter_ValueChanged(object sender, EventArgs e) { 146 if (ChannelParameter.Value == null) 147 name = "Empty EvaluationServiceClient"; 148 else 149 name = String.Format("{0} ServiceClient", ChannelParameter.Value.Name); 150 OnNameChanged(); 151 } 152 #endregion 128 153 } 129 154 } -
trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationTCPChannel.cs
r5445 r6470 32 32 [StorableClass] 33 33 public class EvaluationTCPChannel : EvaluationChannel { 34 34 35 public const int MAX_VARINT32_SIZE = 5; 35 36 37 #region Fields & Properties 36 38 [Storable] 37 39 private string ipAddress; … … 39 41 get { return ipAddress; } 40 42 set { 41 bool changed = !ipAddress.Equals(value);43 if (value == ipAddress) return; 42 44 ipAddress = value; 43 if (changed)44 45 UpdateName(); 46 OnIpAddressChanged(); 45 47 } 46 48 } … … 50 52 get { return port; } 51 53 set { 52 bool changed = port != value;54 if (value == port) return; 53 55 port = value; 54 if (changed)55 56 UpdateName(); 57 OnPortChanged(); 56 58 } 57 59 } 58 60 private Socket socket; 59 61 #endregion 62 63 #region Construction & Cloning 60 64 [StorableConstructor] 61 65 protected EvaluationTCPChannel(bool deserializing) : base(deserializing) { } … … 64 68 ipAddress = original.ipAddress; 65 69 port = original.port; 66 } 70 UpdateName(); 71 } 72 67 73 public override IDeepCloneable Clone(Cloner cloner) { 68 74 return new EvaluationTCPChannel(this, cloner); … … 74 80 this.ipAddress = ip; 75 81 this.port = port; 76 } 82 UpdateName(); 83 } 84 [StorableHook(HookType.AfterDeserialization)] 85 private void AfterDeserialization() { 86 UpdateName(); 87 } 88 #endregion 89 90 77 91 78 92 #region IExternalEvaluationChannel Members … … 183 197 #endregion 184 198 199 #region Auxiliary Methods 200 private void UpdateName() { 201 name = string.Format("TCPChannel {0}:{1}", ipAddress, port); 202 OnNameChanged(); 203 } 204 #endregion 205 185 206 #region Events 186 207 public event EventHandler IpAddressChanged; -
trunk/sources/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IEvaluationChannel.cs
r5445 r6470 24 24 25 25 namespace HeuristicLab.Problems.ExternalEvaluation { 26 public interface IEvaluationChannel : I Item {26 public interface IEvaluationChannel : INamedItem { 27 27 /// <summary> 28 28 /// A flag that describes whether the channel has been initialized or not.
Note: See TracChangeset
for help on using the changeset viewer.