public void ReadsMessage() { MemoryStream inputStream = new MemoryStream(); MessageReader messageReader = new MessageReader( inputStream, this.messageSerializer); // Write a message to the stream byte[] messageBuffer = this.GetMessageBytes(TestEventString); inputStream.Write( this.GetMessageBytes(TestEventString), 0, messageBuffer.Length); inputStream.Flush(); inputStream.Seek(0, SeekOrigin.Begin); Message messageResult = messageReader.ReadMessage().Result; Assert.Equal("testEvent", messageResult.Method); inputStream.Dispose(); }
async Task ListenForMessages() { this.messageLoopSyncContext = SynchronizationContext.Current; // Ensure that the console is using UTF-8 encoding System.Console.InputEncoding = Encoding.UTF8; System.Console.OutputEncoding = Encoding.UTF8; // Open the standard input/output streams this.inputStream = System.Console.OpenStandardInput(); this.outputStream = System.Console.OpenStandardOutput(); IMessageSerializer messageSerializer = null; IMessageProcessor messageProcessor = null; // Use a different serializer and message processor based // on whether this instance should host a language server // debug adapter. if (this.runDebugAdapter) { DebugAdapter debugAdapter = new DebugAdapter(); debugAdapter.Initialize(); messageProcessor = debugAdapter; messageSerializer = new V8MessageSerializer(); } else { // Set up the LanguageServer LanguageServer languageServer = new LanguageServer(); languageServer.Initialize(); messageProcessor = languageServer; messageSerializer = new JsonRpcMessageSerializer(); } // Set up the reader and writer this.messageReader = new MessageReader( this.inputStream, messageSerializer); this.messageWriter = new MessageWriter( this.outputStream, messageSerializer); // Set up the console host which will send events // through the MessageWriter this.consoleHost = new StdioConsoleHost(messageWriter); // Set up the PowerShell session this.editorSession = new EditorSession(); this.editorSession.StartSession(this.consoleHost); this.editorSession.PowerShellContext.OutputWritten += powerShellContext_OutputWritten; if (this.runDebugAdapter) { // Attach to debugger events from the PowerShell session this.editorSession.DebugService.DebuggerStopped += DebugService_DebuggerStopped; } // Run the message loop bool isRunning = true; while (isRunning) { Message newMessage = null; try { // Read a message from stdin newMessage = await this.messageReader.ReadMessage(); } catch (MessageParseException e) { // TODO: Write an error response Logger.Write( LogLevel.Error, "Could not parse a message that was received:\r\n\r\n" + e.ToString()); // Continue the loop continue; } // Process the message await messageProcessor.ProcessMessage( newMessage, this.editorSession, this.messageWriter); } }
public WebSocketMessageDispatcher(MessageReader messageReader, MessageWriter messageWriter) : base(messageReader, messageWriter) { }
public void ReadsManyBufferedMessages() { MemoryStream inputStream = new MemoryStream(); MessageReader messageReader = new MessageReader( inputStream, this.messageSerializer); // Get a message to use for writing to the stream byte[] messageBuffer = this.GetMessageBytes(TestEventString); // How many messages of this size should we write to overflow the buffer? int overflowMessageCount = (int)Math.Ceiling( (MessageReader.DefaultBufferSize * 1.5) / messageBuffer.Length); // Write the necessary number of messages to the stream for (int i = 0; i < overflowMessageCount; i++) { inputStream.Write(messageBuffer, 0, messageBuffer.Length); } inputStream.Flush(); inputStream.Seek(0, SeekOrigin.Begin); // Read the written messages from the stream for (int i = 0; i < overflowMessageCount; i++) { Message messageResult = messageReader.ReadMessage().Result; Assert.Equal("testEvent", messageResult.Method); } inputStream.Dispose(); }
public void ReaderResizesBufferForLargeMessages() { MemoryStream inputStream = new MemoryStream(); MessageReader messageReader = new MessageReader( inputStream, this.messageSerializer); // Get a message with content so large that the buffer will need // to be resized to fit it all. byte[] messageBuffer = this.GetMessageBytes( string.Format( TestEventFormatString, new String('X', (int)(MessageReader.DefaultBufferSize * 3)))); inputStream.Write(messageBuffer, 0, messageBuffer.Length); inputStream.Flush(); inputStream.Seek(0, SeekOrigin.Begin); Message messageResult = messageReader.ReadMessage().Result; Assert.Equal("testEvent", messageResult.Method); inputStream.Dispose(); }