diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..535c7b8 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,22 @@ +:5002 { + @cors_preflight method OPTIONS + + header { + Access-Control-Allow-Origin "{header.origin}" + Vary Origin + Access-Control-Expose-Headers "*" + +Access-Control-Allow-Headers "*" + +Access-Control-Allow-Headers "Authorization,Content-Type,Accept,User-Agent" + Access-Control-Allow-Credentials "true" + } + + handle @cors_preflight { + header { + Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE" + Access-Control-Max-Age "3600" + } + respond "" 204 + } + + reverse_proxy host.docker.internal:5001 +} diff --git a/DysonNetwork.Ring/Connection/WebSocketService.cs b/DysonNetwork.Ring/Connection/WebSocketService.cs index 6e793fa..a017e7f 100644 --- a/DysonNetwork.Ring/Connection/WebSocketService.cs +++ b/DysonNetwork.Ring/Connection/WebSocketService.cs @@ -149,7 +149,7 @@ public class WebSocketService AccountId = Guid.Parse(currentUser.Id), DeviceId = deviceId, PacketBytes = packet.ToBytes() - }).ToBase64() + }).ToByteArray() ); return; } diff --git a/DysonNetwork.Ring/Services/PusherServiceGrpc.cs b/DysonNetwork.Ring/Services/PusherServiceGrpc.cs index 6957e7b..de68ef5 100644 --- a/DysonNetwork.Ring/Services/PusherServiceGrpc.cs +++ b/DysonNetwork.Ring/Services/PusherServiceGrpc.cs @@ -25,12 +25,8 @@ public class RingServiceGrpc( public override Task PushWebSocketPacket(PushWebSocketPacketRequest request, ServerCallContext context) { - var packet = new Shared.Data.WebSocketPacket - { - Type = request.Packet.Type, - Data = GrpcTypeHelper.ConvertByteStringToObject>(request.Packet.Data), - ErrorMessage = request.Packet.ErrorMessage - }; + var packet = Shared.Data.WebSocketPacket.FromProtoValue(request.Packet); + WebSocketService.SendPacketToAccount(Guid.Parse(request.UserId), packet); return Task.FromResult(new Empty()); } @@ -38,12 +34,7 @@ public class RingServiceGrpc( public override Task PushWebSocketPacketToUsers(PushWebSocketPacketToUsersRequest request, ServerCallContext context) { - var packet = new Shared.Data.WebSocketPacket - { - Type = request.Packet.Type, - Data = GrpcTypeHelper.ConvertByteStringToObject>(request.Packet.Data), - ErrorMessage = request.Packet.ErrorMessage - }; + var packet = Shared.Data.WebSocketPacket.FromProtoValue(request.Packet); foreach (var accountId in request.UserIds) WebSocketService.SendPacketToAccount(Guid.Parse(accountId), packet); @@ -54,12 +45,8 @@ public class RingServiceGrpc( public override Task PushWebSocketPacketToDevice(PushWebSocketPacketToDeviceRequest request, ServerCallContext context) { - var packet = new Shared.Data.WebSocketPacket - { - Type = request.Packet.Type, - Data = GrpcTypeHelper.ConvertByteStringToObject>(request.Packet.Data), - ErrorMessage = request.Packet.ErrorMessage - }; + var packet = Shared.Data.WebSocketPacket.FromProtoValue(request.Packet); + websocket.SendPacketToDevice(request.DeviceId, packet); return Task.FromResult(new Empty()); } @@ -67,17 +54,10 @@ public override Task PushWebSocketPacketToDevice(PushWebSocketPacketToDev public override Task PushWebSocketPacketToDevices(PushWebSocketPacketToDevicesRequest request, ServerCallContext context) { - var packet = new Shared.Data.WebSocketPacket - { - Type = request.Packet.Type, - Data = GrpcTypeHelper.ConvertByteStringToObject>(request.Packet.Data), - ErrorMessage = request.Packet.ErrorMessage - }; + var packet = Shared.Data.WebSocketPacket.FromProtoValue(request.Packet); foreach (var deviceId in request.DeviceIds) - { websocket.SendPacketToDevice(deviceId, packet); - } return Task.FromResult(new Empty()); } diff --git a/DysonNetwork.Shared/Stream/WebSocketPacketEvent.cs b/DysonNetwork.Shared/Stream/WebSocketPacketEvent.cs index 0fa82ba..6fc79d4 100644 --- a/DysonNetwork.Shared/Stream/WebSocketPacketEvent.cs +++ b/DysonNetwork.Shared/Stream/WebSocketPacketEvent.cs @@ -4,7 +4,7 @@ public class WebSocketPacketEvent { public static string Type => "websocket_msg"; - public static string SubjectPrefix = "websocket_"; + public const string SubjectPrefix = "websocket_"; public Guid AccountId { get; set; } public string DeviceId { get; set; } = null!; diff --git a/DysonNetwork.Sphere/Startup/BroadcastEventHandler.cs b/DysonNetwork.Sphere/Startup/BroadcastEventHandler.cs index 5ad0837..29232a4 100644 --- a/DysonNetwork.Sphere/Startup/BroadcastEventHandler.cs +++ b/DysonNetwork.Sphere/Startup/BroadcastEventHandler.cs @@ -176,11 +176,14 @@ public class BroadcastEventHandler( await foreach (var msg in nats.SubscribeAsync( WebSocketPacketEvent.SubjectPrefix + "sphere", cancellationToken: stoppingToken)) { + logger.LogDebug("Handling websocket packet..."); + try { var evt = JsonSerializer.Deserialize(msg.Data, GrpcTypeHelper.SerializerOptions); if (evt == null) throw new ArgumentNullException(nameof(evt)); var packet = WebSocketPacket.FromBytes(evt.PacketBytes); + logger.LogInformation("Handling websocket packet... {Type}", packet.Type); switch (packet.Type) { case "messages.read": @@ -255,12 +258,12 @@ public class BroadcastEventHandler( var responsePacket = new WebSocketPacket { Type = "messages.typing", - Data = GrpcTypeHelper.ConvertObjectToByteString(new + Data = new { room_id = sender.ChatRoomId, sender_id = sender.Id, sender = sender - }) + } }; // Broadcast typing indicator to other room members