예제 #1
0
        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);
 }
예제 #3
0
        /// <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);
            }
        }