public static void WriteResponseMessage(HandshakeResponseMessage responseMessage, IBufferWriter <byte> output) { var textWriter = Utf8BufferTextWriter.Get(output); try { using (var writer = JsonUtils.CreateJsonTextWriter(textWriter)) { writer.WriteStartObject(); if (!string.IsNullOrEmpty(responseMessage.Error)) { writer.WritePropertyName(ErrorPropertyName); writer.WriteValue(responseMessage.Error); } writer.WriteEndObject(); writer.Flush(); } } finally { Utf8BufferTextWriter.Return(textWriter); } TextMessageFormatter.WriteRecordSeparator(output); }
public static void WriteResponseMessage(HandshakeResponseMessage responseMessage, Stream output) { using (var writer = CreateJsonTextWriter(output)) { writer.WriteStartObject(); if (!string.IsNullOrEmpty(responseMessage.Error)) { writer.WritePropertyName(ErrorPropertyName); writer.WriteValue(responseMessage.Error); } writer.WriteEndObject(); } TextMessageFormatter.WriteRecordSeparator(output); }
public static bool TryParseResponseMessage(ref ReadOnlySequence <byte> buffer, out HandshakeResponseMessage responseMessage) { if (!TextMessageParser.TryParseMessage(ref buffer, out var payload)) { responseMessage = null; return(false); } var textReader = Utf8BufferTextReader.Get(payload); try { using (var reader = JsonUtils.CreateJsonTextReader(textReader)) { JsonUtils.CheckRead(reader); JsonUtils.EnsureObjectStart(reader); string error = null; var completed = false; while (!completed && JsonUtils.CheckRead(reader)) { switch (reader.TokenType) { case JsonToken.PropertyName: var memberName = reader.Value.ToString(); switch (memberName) { case TypePropertyName: // a handshake response does not have a type // check the incoming message was not any other type of message throw new InvalidDataException("Handshake response should not have a 'type' value."); case ErrorPropertyName: error = JsonUtils.ReadAsString(reader, ErrorPropertyName); break; default: reader.Skip(); break; } break; case JsonToken.EndObject: completed = true; break; default: throw new InvalidDataException($"Unexpected token '{reader.TokenType}' when reading handshake response JSON."); } } ; responseMessage = (error != null) ? new HandshakeResponseMessage(error) : HandshakeResponseMessage.Empty; return(true); } } finally { Utf8BufferTextReader.Return(textReader); } }