Changeset 8660 for branches/GP-MoveOperators/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationServiceClient.cs
- Timestamp:
- 09/14/12 18:58:15 (12 years ago)
- Location:
- branches/GP-MoveOperators
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GP-MoveOperators
- Property svn:ignore
-
old new 21 21 protoc.exe 22 22 _ReSharper.HeuristicLab 3.3 Tests 23 Google.ProtocolBuffers-2.4.1.473.dll
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/GP-MoveOperators/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationServiceClient.cs
r7259 r8660 21 21 22 22 using System; 23 using System.IO; 24 using Google.ProtocolBuffers; 23 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core; … … 73 75 74 76 #region IEvaluationServiceClient Members 75 public QualityMessage Evaluate(SolutionMessage solution ) {77 public QualityMessage Evaluate(SolutionMessage solution, ExtensionRegistry qualityExtensions) { 76 78 int tries = 0, maxTries = RetryParameter.Value.Value; 77 79 bool success = false; … … 82 84 CheckAndOpenChannel(); 83 85 Channel.Send(solution); 84 result = (QualityMessage)Channel.Receive(QualityMessage.CreateBuilder() );86 result = (QualityMessage)Channel.Receive(QualityMessage.CreateBuilder(), qualityExtensions); 85 87 success = true; 86 88 } catch (InvalidOperationException) { … … 91 93 } 92 94 } 95 if (result != null && result.SolutionId != solution.SolutionId) throw new InvalidDataException(Name + ": Received a quality for a different solution."); 93 96 return result; 94 97 } 95 98 96 public void EvaluateAsync(SolutionMessage solution, Action<QualityMessage> callback) {99 public void EvaluateAsync(SolutionMessage solution, ExtensionRegistry qualityExtensions, Action<QualityMessage> callback) { 97 100 int tries = 0, maxTries = RetryParameter.Value.Value; 98 101 bool success = false; … … 110 113 } 111 114 } 112 System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ReceiveAsync), callback);115 System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ReceiveAsync), new ReceiveAsyncInfo(solution, callback, qualityExtensions)); 113 116 } 114 117 #endregion … … 126 129 } 127 130 128 private void ReceiveAsync(object callback) { 131 private void ReceiveAsync(object callbackInfo) { 132 var info = (ReceiveAsyncInfo)callbackInfo; 129 133 QualityMessage message = null; 130 134 try { 131 message = (QualityMessage)Channel.Receive(QualityMessage.CreateBuilder() );135 message = (QualityMessage)Channel.Receive(QualityMessage.CreateBuilder(), info.QualityExtensions); 132 136 } catch { } 133 ((Action<QualityMessage>)callback).Invoke(message); 137 if (message != null && message.SolutionId != info.SolutionMessage.SolutionId) throw new InvalidDataException(Name + ": Received a quality for a different solution."); 138 info.CallbackDelegate.Invoke(message); 134 139 } 135 140 … … 146 151 } 147 152 #endregion 153 154 private class ReceiveAsyncInfo { 155 public SolutionMessage SolutionMessage { get; set; } 156 public Action<QualityMessage> CallbackDelegate { get; set; } 157 public ExtensionRegistry QualityExtensions { get; set; } 158 public ReceiveAsyncInfo(SolutionMessage solutionMessage, Action<QualityMessage> callbackDelegate, ExtensionRegistry qualityExtensions) { 159 SolutionMessage = solutionMessage; 160 CallbackDelegate = callbackDelegate; 161 QualityExtensions = qualityExtensions; 162 } 163 } 148 164 } 149 165 }
Note: See TracChangeset
for help on using the changeset viewer.