@@ -43,6 +43,13 @@ public interface ITransportConfig
43
43
/// </summary>
44
44
public sealed class StdioTransportConfig : ITransportConfig
45
45
{
46
+ private readonly HostLogger _logger ;
47
+
48
+ public StdioTransportConfig ( HostLogger logger )
49
+ {
50
+ _logger = logger ;
51
+ }
52
+
46
53
public string EndpointDetails => "<stdio>" ;
47
54
48
55
public string SessionFileTransportName => "Stdio" ;
@@ -51,6 +58,7 @@ public sealed class StdioTransportConfig : ITransportConfig
51
58
52
59
public Task < ( Stream inStream , Stream outStream ) > ConnectStreamsAsync ( )
53
60
{
61
+ _logger . Log ( PsesLogLevel . Diagnostic , "Connecting stdio streams" ) ;
54
62
return Task . FromResult ( ( Console . OpenStandardInput ( ) , Console . OpenStandardOutput ( ) ) ) ;
55
63
}
56
64
}
@@ -64,29 +72,32 @@ public sealed class DuplexNamedPipeTransportConfig : ITransportConfig
64
72
/// Create a duplex named pipe transport config with an automatically generated pipe name.
65
73
/// </summary>
66
74
/// <returns>A new duplex named pipe transport configuration.</returns>
67
- public static DuplexNamedPipeTransportConfig Create ( )
75
+ public static DuplexNamedPipeTransportConfig Create ( HostLogger logger )
68
76
{
69
- return new DuplexNamedPipeTransportConfig ( NamedPipeUtils . GenerateValidNamedPipeName ( ) ) ;
77
+ return new DuplexNamedPipeTransportConfig ( logger , NamedPipeUtils . GenerateValidNamedPipeName ( ) ) ;
70
78
}
71
79
72
80
/// <summary>
73
81
/// Create a duplex named pipe transport config with the given pipe name.
74
82
/// </summary>
75
83
/// <returns>A new duplex named pipe transport configuration.</returns>
76
- public static DuplexNamedPipeTransportConfig Create ( string pipeName )
84
+ public static DuplexNamedPipeTransportConfig Create ( HostLogger logger , string pipeName )
77
85
{
78
86
if ( pipeName == null )
79
87
{
80
- return DuplexNamedPipeTransportConfig . Create ( ) ;
88
+ return DuplexNamedPipeTransportConfig . Create ( logger ) ;
81
89
}
82
90
83
- return new DuplexNamedPipeTransportConfig ( pipeName ) ;
91
+ return new DuplexNamedPipeTransportConfig ( logger , pipeName ) ;
84
92
}
85
93
94
+ private readonly HostLogger _logger ;
95
+
86
96
private readonly string _pipeName ;
87
97
88
- private DuplexNamedPipeTransportConfig ( string pipeName )
98
+ private DuplexNamedPipeTransportConfig ( HostLogger logger , string pipeName )
89
99
{
100
+ _logger = logger ;
90
101
_pipeName = pipeName ;
91
102
SessionFileEntries = new Dictionary < string , object > { { "PipeName" , NamedPipeUtils . GetNamedPipePath ( pipeName ) } } ;
92
103
}
@@ -99,8 +110,11 @@ private DuplexNamedPipeTransportConfig(string pipeName)
99
110
100
111
public async Task < ( Stream inStream , Stream outStream ) > ConnectStreamsAsync ( )
101
112
{
113
+ _logger . Log ( PsesLogLevel . Diagnostic , "Creating named pipe" ) ;
102
114
NamedPipeServerStream namedPipe = NamedPipeUtils . CreateNamedPipe ( _pipeName , PipeDirection . InOut ) ;
115
+ _logger . Log ( PsesLogLevel . Diagnostic , "Waiting for named pipe connection" ) ;
103
116
await namedPipe . WaitForConnectionAsync ( ) . ConfigureAwait ( false ) ;
117
+ _logger . Log ( PsesLogLevel . Diagnostic , "Named pipe connected" ) ;
104
118
return ( namedPipe , namedPipe ) ;
105
119
}
106
120
}
@@ -117,42 +131,44 @@ public sealed class SimplexNamedPipeTransportConfig : ITransportConfig
117
131
/// Create a pair of simplex named pipes using generated names.
118
132
/// </summary>
119
133
/// <returns>A new simplex named pipe transport config.</returns>
120
- public static SimplexNamedPipeTransportConfig Create ( )
134
+ public static SimplexNamedPipeTransportConfig Create ( HostLogger logger )
121
135
{
122
- return SimplexNamedPipeTransportConfig . Create ( NamedPipeUtils . GenerateValidNamedPipeName ( new [ ] { InPipePrefix , OutPipePrefix } ) ) ;
136
+ return SimplexNamedPipeTransportConfig . Create ( logger , NamedPipeUtils . GenerateValidNamedPipeName ( new [ ] { InPipePrefix , OutPipePrefix } ) ) ;
123
137
}
124
138
125
139
/// <summary>
126
140
/// Create a pair of simplex named pipes using the given name as a base.
127
141
/// </summary>
128
142
/// <returns>A new simplex named pipe transport config.</returns>
129
- public static SimplexNamedPipeTransportConfig Create ( string pipeNameBase )
143
+ public static SimplexNamedPipeTransportConfig Create ( HostLogger logger , string pipeNameBase )
130
144
{
131
145
if ( pipeNameBase == null )
132
146
{
133
- return SimplexNamedPipeTransportConfig . Create ( ) ;
147
+ return SimplexNamedPipeTransportConfig . Create ( logger ) ;
134
148
}
135
149
136
150
string inPipeName = $ "{ InPipePrefix } _{ pipeNameBase } ";
137
151
string outPipeName = $ "{ OutPipePrefix } _{ pipeNameBase } ";
138
152
139
- return SimplexNamedPipeTransportConfig . Create ( inPipeName , outPipeName ) ;
153
+ return SimplexNamedPipeTransportConfig . Create ( logger , inPipeName , outPipeName ) ;
140
154
}
141
155
142
156
/// <summary>
143
157
/// Create a pair of simplex named pipes using the given names.
144
158
/// </summary>
145
159
/// <returns>A new simplex named pipe transport config.</returns>
146
- public static SimplexNamedPipeTransportConfig Create ( string inPipeName , string outPipeName )
160
+ public static SimplexNamedPipeTransportConfig Create ( HostLogger logger , string inPipeName , string outPipeName )
147
161
{
148
- return new SimplexNamedPipeTransportConfig ( inPipeName , outPipeName ) ;
162
+ return new SimplexNamedPipeTransportConfig ( logger , inPipeName , outPipeName ) ;
149
163
}
150
164
165
+ private readonly HostLogger _logger ;
151
166
private readonly string _inPipeName ;
152
167
private readonly string _outPipeName ;
153
168
154
- private SimplexNamedPipeTransportConfig ( string inPipeName , string outPipeName )
169
+ private SimplexNamedPipeTransportConfig ( HostLogger logger , string inPipeName , string outPipeName )
155
170
{
171
+ _logger = logger ;
156
172
_inPipeName = inPipeName ;
157
173
_outPipeName = outPipeName ;
158
174
@@ -171,14 +187,18 @@ private SimplexNamedPipeTransportConfig(string inPipeName, string outPipeName)
171
187
172
188
public async Task < ( Stream inStream , Stream outStream ) > ConnectStreamsAsync ( )
173
189
{
190
+ _logger . Log ( PsesLogLevel . Diagnostic , "Starting in pipe connection" ) ;
174
191
NamedPipeServerStream inPipe = NamedPipeUtils . CreateNamedPipe ( _inPipeName , PipeDirection . InOut ) ;
175
192
Task inPipeConnected = inPipe . WaitForConnectionAsync ( ) ;
176
193
194
+ _logger . Log ( PsesLogLevel . Diagnostic , "Starting out pipe connection" ) ;
177
195
NamedPipeServerStream outPipe = NamedPipeUtils . CreateNamedPipe ( _outPipeName , PipeDirection . Out ) ;
178
196
Task outPipeConnected = outPipe . WaitForConnectionAsync ( ) ;
179
197
198
+ _logger . Log ( PsesLogLevel . Diagnostic , "Wating for pipe connections" ) ;
180
199
await Task . WhenAll ( inPipeConnected , outPipeConnected ) . ConfigureAwait ( false ) ;
181
200
201
+ _logger . Log ( PsesLogLevel . Diagnostic , "Simplex named pipe transport connected" ) ;
182
202
return ( inPipe , outPipe ) ;
183
203
}
184
204
}
0 commit comments