public void Stop() { if (InPipe != null) { if (InPipe.IsConnected) { InPipe.Disconnect(); } InPipe.Close(); InPipe.Dispose(); InPipe = null; } if (OutPipe != null) { if (OutPipe.IsConnected) { OutPipe.Disconnect(); } OutPipe.Close(); OutPipe.Dispose(); OutPipe = null; } Status = ConnStatus.Disconnected; }
/// <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); } }