150 | 150 | Also shown in the class diagram are a number of converters that are used to convert HeuristicLab data types, such as the variables that contain the solution representation, to a `SolutionMessage`. The `SolutionMessageBuilder` is the class that contains a number of converters and allows the `ExternalEvaluator` to construct the message. Which converter shall be used can be configured in the GUI when creating the `ExternalEvaluationProblem` and the converters are naturally extensible. A user can define an own converter implementing `IItemToSolutionMessageConverter` and add it to the `SolutionMessageBuilder` in the GUI. By default the `SolutionMessageBuilder` is configured with all the converters that can be seen which in turn cover all the data types in the !HeuristicLab.Data namespace. The solution representations in !HeuristicLab.Encodings are derived from those, so the converters also cover them too. But any solution representation not derived directly from one of the objects in !HeuristicLab.Data naturally requires an own converter (e.g. !HeuristicLab.Encodings.!SymbolicExpressionTree is such a type). Next in the class diagram is the `EvaluationServiceClient` which holds a Channel and allows the `ExternalEvaluator` to communicate with the remote process. Finally, there is a class that describes the `ExternalEvaluationPRoblem` itself, as well as the `QualityMessage` (the expected answer from the service) and the `SolutionMessage`. These two are automatically created by parsing the !ExternalEvaluationMessages.proto file with the compiler tools of Google's protocol buffer framework. |