chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.ComponentModel;
using System.IO.Pipes;
using System.Linq;
using System.Threading;
using OpenTap.Cli;
 
namespace OpenTap
{
    [Browsable(false)]
    internal class ProcessCliAction : ICliAction
    {
        [CommandLineArgument("PipeHandle")] public string PipeHandle { get; set; }
 
        public int Execute(CancellationToken cancellationToken)
        {
            var client = new NamedPipeClientStream(".", PipeHandle, PipeDirection.InOut);
            var listener = new EventTraceListener();
 
            listener.MessageLogged += evts =>
            {
                if (client.IsConnected == false) return;
                client.WriteMessage(evts.ToArray());
            };
 
            try
            {
                client.Connect();
                var plan = client.ReadMessage<TestPlan>();
 
                Log.AddListener(listener);
                return (int)plan.Execute(Array.Empty<IResultListener>()).Verdict;
            }
            finally
            {
                // ensure the log is flushed before removing the listener.
                Log.Flush();
                Log.RemoveListener(listener);
                client.Dispose();
            }
        }
    }
}