diff --git a/DysonNetwork.Pusher/Connection/WebSocketPacket.cs b/DysonNetwork.Pusher/Connection/WebSocketPacket.cs index 59a3733..6760fdc 100644 --- a/DysonNetwork.Pusher/Connection/WebSocketPacket.cs +++ b/DysonNetwork.Pusher/Connection/WebSocketPacket.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using System.Text.Json.Serialization; using DysonNetwork.Shared.Proto; using NodaTime; using NodaTime.Serialization.SystemTextJson; @@ -8,8 +9,14 @@ namespace DysonNetwork.Pusher.Connection; public class WebSocketPacket { public string Type { get; set; } = null!; + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public object? Data { get; set; } = null!; + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Endpoint { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? ErrorMessage { get; set; } /// @@ -74,7 +81,7 @@ public class WebSocketPacket ErrorMessage = ErrorMessage }; } - + public static WebSocketPacket FromProtoValue(Shared.Proto.WebSocketPacket packet) { return new WebSocketPacket @@ -84,4 +91,4 @@ public class WebSocketPacket ErrorMessage = packet.ErrorMessage }; } -} \ No newline at end of file +} diff --git a/DysonNetwork.Pusher/Connection/WebSocketService.cs b/DysonNetwork.Pusher/Connection/WebSocketService.cs index 992527b..40b3522 100644 --- a/DysonNetwork.Pusher/Connection/WebSocketService.cs +++ b/DysonNetwork.Pusher/Connection/WebSocketService.cs @@ -109,6 +109,20 @@ public class WebSocketService WebSocket socket ) { + if (packet.Type == WebSocketPacketType.Ping) + { + await socket.SendAsync( + new ArraySegment(new WebSocketPacket + { + Type = WebSocketPacketType.Pong + }.ToBytes()), + WebSocketMessageType.Binary, + true, + CancellationToken.None + ); + return; + } + if (_handlerMap.TryGetValue(packet.Type, out var handler)) { await handler.HandleAsync(currentUser, deviceId, packet, socket, this); @@ -176,4 +190,4 @@ public class WebSocketService CancellationToken.None ); } -} \ No newline at end of file +} diff --git a/DysonNetwork.Shared/Data/WebSocket.cs b/DysonNetwork.Shared/Data/WebSocket.cs index b7f8be1..c50bf85 100644 --- a/DysonNetwork.Shared/Data/WebSocket.cs +++ b/DysonNetwork.Shared/Data/WebSocket.cs @@ -2,6 +2,8 @@ namespace DysonNetwork.Shared.Data; public abstract class WebSocketPacketType { + public const string Ping = "ping"; + public const string Pong = "pong"; public const string Error = "error"; public const string MessageNew = "messages.new"; public const string MessageUpdate = "messages.update";