public static void WriteRequestMessage(HandshakeRequestMessage requestMessage, Stream output) { using (var writer = CreateJsonTextWriter(output)) { writer.WriteStartObject(); writer.WritePropertyName(ProtocolPropertyName); writer.WriteValue(requestMessage.Protocol); writer.WriteEndObject(); } TextMessageFormatter.WriteRecordSeparator(output); }
public static bool TryParseRequestMessage(ReadOnlySequence <byte> buffer, out HandshakeRequestMessage requestMessage, out SequencePosition consumed, out SequencePosition examined) { if (!TryReadMessageIntoSingleMemory(buffer, out consumed, out examined, out var memory)) { requestMessage = null; return(false); } if (!TextMessageParser.TryParseMessage(ref memory, out var payload)) { throw new InvalidDataException("Unable to parse payload as a handshake request message."); } using (var reader = CreateJsonTextReader(payload)) { var token = JToken.ReadFrom(reader); var handshakeJObject = JsonUtils.GetObject(token); var protocol = JsonUtils.GetRequiredProperty <string>(handshakeJObject, ProtocolPropertyName); requestMessage = new HandshakeRequestMessage(protocol); } return(true); }
public static void WriteRequestMessage(HandshakeRequestMessage requestMessage, IBufferWriter <byte> output) { var textWriter = Utf8BufferTextWriter.Get(output); try { using (var writer = JsonUtils.CreateJsonTextWriter(textWriter)) { writer.WriteStartObject(); writer.WritePropertyName(ProtocolPropertyName); writer.WriteValue(requestMessage.Protocol); writer.WritePropertyName(ProtocolVersionPropertyName); writer.WriteValue(requestMessage.Version); writer.WriteEndObject(); writer.Flush(); } } finally { Utf8BufferTextWriter.Return(textWriter); } TextMessageFormatter.WriteRecordSeparator(output); }
public static bool TryParseRequestMessage(ref ReadOnlySequence <byte> buffer, out HandshakeRequestMessage requestMessage) { if (!TextMessageParser.TryParseMessage(ref buffer, out var payload)) { requestMessage = null; return(false); } var textReader = Utf8BufferTextReader.Get(payload); try { using (var reader = JsonUtils.CreateJsonTextReader(textReader)) { JsonUtils.CheckRead(reader); JsonUtils.EnsureObjectStart(reader); string protocol = null; int? protocolVersion = null; var completed = false; while (!completed && JsonUtils.CheckRead(reader)) { switch (reader.TokenType) { case JsonToken.PropertyName: var memberName = reader.Value.ToString(); switch (memberName) { case ProtocolPropertyName: protocol = JsonUtils.ReadAsString(reader, ProtocolPropertyName); break; case ProtocolVersionPropertyName: protocolVersion = JsonUtils.ReadAsInt32(reader, ProtocolVersionPropertyName); break; default: reader.Skip(); break; } break; case JsonToken.EndObject: completed = true; break; default: throw new InvalidDataException($"Unexpected token '{reader.TokenType}' when reading handshake request JSON."); } } if (protocol == null) { throw new InvalidDataException($"Missing required property '{ProtocolPropertyName}'."); } if (protocolVersion == null) { throw new InvalidDataException($"Missing required property '{ProtocolVersionPropertyName}'."); } requestMessage = new HandshakeRequestMessage(protocol, protocolVersion.Value); } } finally { Utf8BufferTextReader.Return(textReader); } return(true); }