public void ParseMessage_KeepAlive_ParseMessage() { // arrange ReadOnlySequence <byte> message = GetBytes(@"{""type"": ""ka""}"); // act GraphQLWebSocketMessage parsed = GraphQLWebSocketMessageParser.Parse(message); // assert Assert.Equal(GraphQLWebSocketMessageType.KeepAlive, parsed.Type); }
public void ParseMessage_ConnectionTerminate_ParseMessage() { // arrange ReadOnlySequence <byte> message = GetBytes(@"{""type"": ""connection_terminate"" }"); // act GraphQLWebSocketMessage parsed = GraphQLWebSocketMessageParser.Parse(message); // assert Assert.Equal(GraphQLWebSocketMessageType.ConnectionTerminate, parsed.Type); }
public void ParseMessage_ConnectionError_ParseMessage() { // arrange ReadOnlySequence <byte> message = GetBytes(@"{""type"": ""connection_error"", ""payload"": ""payload""}"); // act GraphQLWebSocketMessage parsed = GraphQLWebSocketMessageParser.Parse(message); // assert Assert.Equal(GraphQLWebSocketMessageType.ConnectionError, parsed.Type); Assert.Equal("payload", parsed.Payload.RootElement.ToString()); }
public void ParseMessage_Complete_ParseMessage() { // arrange ReadOnlySequence <byte> message = GetBytes(@"{""type"": ""complete"", ""id"":""123""}"); // act GraphQLWebSocketMessage parsed = GraphQLWebSocketMessageParser.Parse(message); // assert Assert.Equal(GraphQLWebSocketMessageType.Complete, parsed.Type); Assert.Equal("123", parsed.Id); }
public void ParseMessage_Start_ParseMessage() { // arrange ReadOnlySequence <byte> message = GetBytes(@"{""type"": ""start"", ""id"":""123"", ""payload"": ""payload""}"); // act GraphQLWebSocketMessage parsed = GraphQLWebSocketMessageParser.Parse(message); // assert Assert.Equal(GraphQLWebSocketMessageType.Start, parsed.Type); Assert.Equal("123", parsed.Id); Assert.Equal("payload", parsed.Payload.RootElement.ToString()); }
private ValueTask ProcessAsync( ReadOnlySequence <byte> slice, CancellationToken cancellationToken) { try { GraphQLWebSocketMessage message = GraphQLWebSocketMessageParser.Parse(slice); if (message.Id is { } id) { return(message.Type switch { GraphQLWebSocketMessageType.Data => Notify( id, new DataDocumentOperationMessage <JsonDocument>(message.Payload), cancellationToken), GraphQLWebSocketMessageType.Complete => Notify( id, CompleteOperationMessage.Default, cancellationToken), GraphQLWebSocketMessageType.Error => Notify( id, ErrorOperationMessage.UnexpectedServerError, cancellationToken), GraphQLWebSocketMessageType.ConnectionError => Notify( id, ErrorOperationMessage.ConnectionInitializationError, cancellationToken), _ => CloseSocketOnProtocolError( "Invalid message type received: " + message.Type, cancellationToken) }); }
/// <summary> /// Parses the message out of the sequence /// </summary> /// <returns></returns> /// <exception cref="SerializationException"> /// Thrown when a invalid token, a unknown field or the type is not specified /// </exception> private GraphQLWebSocketMessage ParseMessage() { _reader.Read(); Expect(JsonTokenType.StartObject); var message = new GraphQLWebSocketMessage(); _reader.Read(); while (_reader.TokenType != JsonTokenType.EndObject) { ParseMessageProperty(ref message); _reader.Read(); } if (message.Type == GraphQLWebSocketMessageType.None) { throw ThrowHelper.Serialization_MessageHadNoTypeSpecified(); } return(message); }
private void ParseMessageProperty(ref GraphQLWebSocketMessage message) { Expect(JsonTokenType.PropertyName); ReadOnlySpan <byte> fieldName = _reader.ValueSpan; _reader.Read(); switch (fieldName[0]) { case _t: if (fieldName.SequenceEqual(Type)) { Expect(JsonTokenType.String); message.Type = ParseMessageType(); } break; case _i: if (fieldName.SequenceEqual(Id)) { Expect(JsonTokenType.String); message.Id = _reader.GetString(); } break; case _p: if (fieldName.SequenceEqual(Payload)) { message.Payload = JsonDocument.ParseValue(ref _reader); } break; default: throw ThrowHelper.Serialization_UnknownField(fieldName); } }