12
12
using Microsoft . PowerShell . EditorServices . Transport . Stdio . Response ;
13
13
using Nito . AsyncEx ;
14
14
using System ;
15
+ using System . IO ;
15
16
using System . Management . Automation ;
16
17
using System . Reflection ;
17
18
using System . Text ;
@@ -24,6 +25,8 @@ public class MessageLoop : IHost
24
25
{
25
26
#region Private Fields
26
27
28
+ private Stream inputStream ;
29
+ private Stream outputStream ;
27
30
private IConsoleHost consoleHost ;
28
31
private EditorSession editorSession ;
29
32
private MessageReader messageReader ;
@@ -75,17 +78,19 @@ async Task ListenForMessages()
75
78
MessageTypeResolver messageTypeResolver = new MessageTypeResolver ( ) ;
76
79
messageTypeResolver . ScanForMessageTypes ( typeof ( StartedEvent ) . Assembly ) ;
77
80
81
+ // Open the standard input/output streams
82
+ this . inputStream = System . Console . OpenStandardInput ( ) ;
83
+ this . outputStream = System . Console . OpenStandardOutput ( ) ;
84
+
78
85
// Set up the reader and writer
79
86
this . messageReader =
80
87
new MessageReader (
81
- System . Console . In ,
82
- MessageFormat . WithContentLength ,
88
+ this . inputStream ,
83
89
messageTypeResolver ) ;
84
90
85
91
this . messageWriter =
86
92
new MessageWriter (
87
- System . Console . Out ,
88
- MessageFormat . WithContentLength ,
93
+ this . outputStream ,
89
94
messageTypeResolver ) ;
90
95
91
96
// Set up the console host which will send events
@@ -102,7 +107,7 @@ async Task ListenForMessages()
102
107
this . editorSession . DebugService . DebuggerStopped += DebugService_DebuggerStopped ;
103
108
104
109
// Send a "started" event
105
- this . messageWriter . WriteMessage (
110
+ await this . messageWriter . WriteMessage (
106
111
new StartedEvent ( ) ) ;
107
112
108
113
// Run the message loop
@@ -120,7 +125,7 @@ async Task ListenForMessages()
120
125
{
121
126
// Write an error response
122
127
this . messageWriter . WriteMessage (
123
- MessageErrorResponse . CreateParseErrorResponse ( e ) ) ;
128
+ MessageErrorResponse . CreateParseErrorResponse ( e ) ) . Wait ( ) ;
124
129
125
130
// Continue the loop
126
131
continue ;
@@ -141,7 +146,7 @@ await messageProcessor.ProcessMessage(
141
146
if ( newMessage != null )
142
147
{
143
148
// Return an error response to keep the client moving
144
- this . messageWriter . WriteMessage (
149
+ await this . messageWriter . WriteMessage (
145
150
MessageErrorResponse . CreateUnhandledMessageResponse (
146
151
newMessage ) ) ;
147
152
}
@@ -154,9 +159,9 @@ await messageProcessor.ProcessMessage(
154
159
}
155
160
}
156
161
157
- void DebugService_DebuggerStopped ( object sender , DebuggerStopEventArgs e )
162
+ async void DebugService_DebuggerStopped ( object sender , DebuggerStopEventArgs e )
158
163
{
159
- this . messageWriter . WriteMessage (
164
+ await this . messageWriter . WriteMessage (
160
165
new StoppedEvent
161
166
{
162
167
Body = new StoppedEventBody
@@ -177,11 +182,11 @@ void PowerShellSession_BreakpointUpdated(object sender, BreakpointUpdatedEventAr
177
182
{
178
183
}
179
184
180
- void PowerShellSession_OutputWritten ( object sender , OutputWrittenEventArgs e )
185
+ async void PowerShellSession_OutputWritten ( object sender , OutputWrittenEventArgs e )
181
186
{
182
187
// TODO: change this to use the OutputEvent!
183
188
184
- this . messageWriter . WriteMessage (
189
+ await this . messageWriter . WriteMessage (
185
190
new ReplWriteOutputEvent
186
191
{
187
192
Body = new ReplWriteOutputEventBody
0 commit comments