/// <summary> /// Stores the result of the routine implementation to the output pipe. /// </summary> /// <param name="result">The result to store</param> private void SetResult(TR result) { Log(LogLevel.Debug, $"Storing Result {result.ToString()}"); byte[] data = ThriftSerializer.Serialize(result); OutPipe.Store(data.Length); OutPipe.Store(data); }
/// <inheritdoc /> protected override void RunRoutine() { try { Log(LogLevel.Debug, "Try to receive result from ObjectiveRoutine"); // Receive object from inPipe InPipe.ReadInt(); T t = InPipe.Read(Activator.CreateInstance <T>()); Log(LogLevel.Debug, $"Received from ObjectiveRoutine: {t.ToString()}"); // Map function List <Tuple <string, TV> > tuples = Map(t); Log(LogLevel.Debug, $"Mapping done, created {tuples.Count} tuples"); // Tell Receiver the number of tuples Log(LogLevel.Debug, "Storing number of tuples"); OutPipe.Store(tuples.Count); // Store tuples to outPipe int i = 1; foreach (Tuple <string, TV> tuple in tuples) { // Write key Log(LogLevel.Debug, $"Write key {i}: {tuple.Item1}"); OutPipe.Store(tuple.Item1); // Write value (size & data) Log(LogLevel.Debug, $"Write value {i}: {tuple.Item2.ToString()}"); byte[] data = ThriftSerializer.Serialize(tuple.Item2); OutPipe.Store(data.Length); // size OutPipe.Store(data); i++; } } catch (Exception e) { Log(LogLevel.Error, $"Error while running map routine: {e.Message}"); throw new RoutineException(e); } }