private static void WriteId( this SocketMessageWriter writer, string id) { writer.Writer.WritePropertyName("id"); writer.Writer.WriteStringValue(id); }
private async Task RegisterInternalAsync( ISubscription subscription, ISocketConnection connection) { if (_subs.TryAdd(subscription.Id, new Sub(subscription, connection))) { connection.Disposed += (sender, args) => RemoveSubscription(subscription.Id); if (connection.IsClosed) { _subs.TryRemove(subscription.Id, out _); return; } subscription.OnRegister(() => UnregisterAsync(subscription.Id)); var writer = new SocketMessageWriter(); writer.WriteStartObject(); writer.WriteType(MessageTypes.Subscription.Start); writer.WriteId(subscription.Id); writer.WriteStartPayload(); subscription.OperationFormatter.Serialize(subscription.Operation, writer); writer.WriteEndObject(); await connection.SendAsync(writer.Body).ConfigureAwait(false); } }
public async Task WriteInitializeMessage_CustomObject_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); // act writer.WriteInitializeMessage(new CustomPayload()); // assert Encoding.UTF8.GetString(writer.Body.Span).MatchSnapshot(); }
public async Task WriteInitializeMessage_Default_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); // act writer.WriteInitializeMessage(null); // assert Encoding.UTF8.GetString(writer.Body.Span).MatchSnapshot(); }
public async Task WriteStopOperationMessage_OperationIdNull_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); // act Exception?ex = Record.Exception(() => writer.WriteStopOperationMessage(null !)); // assert Assert.IsType <ArgumentNullException>(ex); }
public async Task WriteStopOperationMessage_WithOperationId_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); var operationId = "12f90cc5-2905-4d10-b33a-cb6d8f98a810"; // act writer.WriteStopOperationMessage(operationId); // assert Encoding.UTF8.GetString(writer.Body.Span).MatchSnapshot(); }
public async Task WriteInitializeMessage_Dictionary_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); // act writer.WriteInitializeMessage(new Dictionary <string, object> { ["Key"] = "Value" }); // assert Encoding.UTF8.GetString(writer.Body.Span).MatchSnapshot(); }
/// <summary> /// Writes a <see cref="GraphQLWebSocketMessageType.Stop"/> message to the writer /// </summary> /// <param name="writer">The writer</param> /// <param name="operationId">The operation id of the operation</param> public static void WriteStopOperationMessage( this SocketMessageWriter writer, string operationId) { if (operationId == null) { throw new ArgumentNullException(nameof(operationId)); } writer.WriteStartObject(); writer.WriteType(GraphQLWebSocketMessageType.Stop); writer.WriteId(operationId); writer.WriteEndObject(); }
public async Task UnregisterAsync(string subscriptionId) { if (_subs.TryRemove(subscriptionId, out Sub? sub)) { var writer = new SocketMessageWriter(); writer.WriteStartObject(); writer.WriteType(MessageTypes.Subscription.Stop); writer.WriteId(subscriptionId); writer.WriteEndObject(); await sub.Connection.SendAsync(writer.Body); } }
public async Task WriteStartOperationMessage_RequestIsNull_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); var operationId = "12f90cc5-2905-4d10-b33a-cb6d8f98a810"; // act Exception?ex = Record.Exception(() => writer.WriteStartOperationMessage(operationId, null !)); // assert Assert.IsType <ArgumentNullException>(ex); }
/// <summary> /// Writes a <see cref="GraphQLWebSocketMessageType.ConnectionInit"/>message to the writer /// </summary> /// <param name="writer">The writer</param> /// <param name="payload">The payload of the init message</param> public static void WriteInitializeMessage( this SocketMessageWriter writer, object?payload) { writer.WriteStartObject(); writer.WriteType(GraphQLWebSocketMessageType.ConnectionInit); if (payload is not null) { writer.WriteStartPayload(); JsonSerializer.Serialize(writer.Writer, payload); } writer.WriteEndObject(); }
public async Task WriteStartOperationMessage_WithOperation_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); var operationId = "12f90cc5-2905-4d10-b33a-cb6d8f98a810"; var request = new OperationRequest("Foo", GetHeroQueryDocument.Instance, new Dictionary <string, object?>() { { "Var1", "Value1" } }); // act writer.WriteStartOperationMessage(operationId, request); // assert Encoding.UTF8.GetString(writer.Body.Span).MatchSnapshot(); }
public async Task WriteStartOperationMessage_OperationIdNull_IsMatch() { // arrange await using var writer = new SocketMessageWriter(); var request = new OperationRequest("Foo", GetHeroQueryDocument.Instance, new Dictionary <string, object?>() { { "Var1", "Value1" } }); // act Exception?ex = Record.Exception(() => writer.WriteStartOperationMessage(null !, request)); // assert Assert.IsType <ArgumentNullException>(ex); }
/// <summary> /// Writes a <see cref="GraphQLWebSocketMessageType.Start"/> message to the writer /// </summary> /// <param name="writer">The writer</param> /// <param name="operationId">The operation id of the operation</param> /// <param name="request">The operation request containing the payload</param> public static void WriteStartOperationMessage( this SocketMessageWriter writer, string operationId, OperationRequest request) { if (operationId == null) { throw new ArgumentNullException(nameof(operationId)); } if (request == null) { throw new ArgumentNullException(nameof(request)); } writer.WriteStartObject(); writer.WriteType(GraphQLWebSocketMessageType.Start); writer.WriteId(operationId); writer.WriteStartPayload(); writer.Serialize(request); writer.WriteEndObject(); }
private static void WriteType( this SocketMessageWriter writer, GraphQLWebSocketMessageType type) { writer.Writer.WritePropertyName("type"); ReadOnlySpan <byte> typeToWriter = type switch { GraphQLWebSocketMessageType.ConnectionInit => ConnectionInitialize, GraphQLWebSocketMessageType.ConnectionAccept => ConnectionAccept, GraphQLWebSocketMessageType.ConnectionError => ConnectionError, GraphQLWebSocketMessageType.KeepAlive => KeepAlive, GraphQLWebSocketMessageType.ConnectionTerminate => ConnectionTerminate, GraphQLWebSocketMessageType.Start => Start, GraphQLWebSocketMessageType.Data => Data, GraphQLWebSocketMessageType.Error => Error, GraphQLWebSocketMessageType.Complete => Complete, GraphQLWebSocketMessageType.Stop => Stop, _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; writer.Writer.WriteStringValue(typeToWriter); }
/// <summary> /// Writes a <see cref="GraphQLWebSocketMessageType.ConnectionInit"/>message to the writer /// </summary> /// <param name="writer">The writer</param> public static void WriteInitializeMessage(this SocketMessageWriter writer) { writer.WriteStartObject(); writer.WriteType(GraphQLWebSocketMessageType.ConnectionInit); writer.WriteEndObject(); }
/// <summary> /// Writes a <see cref="GraphQLWebSocketMessageType.ConnectionTerminate"/> message to the /// writer /// </summary> /// <param name="writer">The writer</param> public static void WriteTerminateMessage(this SocketMessageWriter writer) { writer.WriteStartObject(); writer.WriteType(GraphQLWebSocketMessageType.ConnectionTerminate); writer.WriteEndObject(); }
private static void Serialize( this SocketMessageWriter writer, OperationRequest request) { JsonOperationRequestSerializer.Default.Serialize(request, writer.Writer); }
private static void WriteStartPayload(this SocketMessageWriter writer) { writer.Writer.WritePropertyName("payload"); }