Shared project ring helper service

This commit is contained in:
2026-01-24 10:56:29 +08:00
parent c58cbf8de9
commit b851b9f6e2
3 changed files with 183 additions and 1 deletions

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<PackageId>DysonNetwork.Shared</PackageId>
<Version>1.0.0</Version>
<Version>1.0.1</Version>
<Authors>LittleSheep</Authors>
<Company>Solsynth</Company>
<Description>Shared project of the Solar Network server side software.</Description>

View File

@@ -0,0 +1,181 @@
using DysonNetwork.Shared.Proto;
namespace DysonNetwork.Shared.Registry;
public class RemoteRingService(RingService.RingServiceClient ring)
{
public async Task SendEmail(string toName, string toAddress, string subject, string body)
{
var request = new SendEmailRequest
{
Email = new EmailMessage
{
ToName = toName,
ToAddress = toAddress,
Subject = subject,
Body = body
}
};
await ring.SendEmailAsync(request);
}
public async Task PushWebSocketPacket(string accountId, string type, byte[] data, string? errorMessage = null)
{
var request = new PushWebSocketPacketRequest
{
UserId = accountId,
Packet = new WebSocketPacket
{
Type = type,
Data = Google.Protobuf.ByteString.CopyFrom(data)
}
};
if (errorMessage != null)
request.Packet.ErrorMessage = errorMessage;
await ring.PushWebSocketPacketAsync(request);
}
public async Task PushWebSocketPacketToUsers(List<string> userIds, string type, byte[] data, string? errorMessage = null)
{
var request = new PushWebSocketPacketToUsersRequest
{
Packet = new WebSocketPacket
{
Type = type,
Data = Google.Protobuf.ByteString.CopyFrom(data)
}
};
request.UserIds.AddRange(userIds);
if (errorMessage != null)
request.Packet.ErrorMessage = errorMessage;
await ring.PushWebSocketPacketToUsersAsync(request);
}
public async Task PushWebSocketPacketToDevice(string deviceId, string type, byte[] data, string? errorMessage = null)
{
var request = new PushWebSocketPacketToDeviceRequest
{
DeviceId = deviceId,
Packet = new WebSocketPacket
{
Type = type,
Data = Google.Protobuf.ByteString.CopyFrom(data)
}
};
if (errorMessage != null)
request.Packet.ErrorMessage = errorMessage;
await ring.PushWebSocketPacketToDeviceAsync(request);
}
public async Task PushWebSocketPacketToDevices(List<string> deviceIds, string type, byte[] data, string? errorMessage = null)
{
var request = new PushWebSocketPacketToDevicesRequest
{
Packet = new WebSocketPacket
{
Type = type,
Data = Google.Protobuf.ByteString.CopyFrom(data)
}
};
request.DeviceIds.AddRange(deviceIds);
if (errorMessage != null)
request.Packet.ErrorMessage = errorMessage;
await ring.PushWebSocketPacketToDevicesAsync(request);
}
public async Task SendPushNotificationToUser(string userId, string topic, string title, string subtitle, string body, byte[]? meta = null, string? actionUri = null, bool isSilent = false, bool isSavable = false)
{
var request = new SendPushNotificationToUserRequest
{
UserId = userId,
Notification = new PushNotification
{
Topic = topic,
Title = title,
Subtitle = subtitle,
Body = body,
IsSilent = isSilent,
IsSavable = isSavable
}
};
if (meta != null)
request.Notification.Meta = Google.Protobuf.ByteString.CopyFrom(meta);
if (actionUri != null)
request.Notification.ActionUri = actionUri;
await ring.SendPushNotificationToUserAsync(request);
}
public async Task SendPushNotificationToUsers(List<string> userIds, string topic, string title, string subtitle, string body, byte[]? meta = null, string? actionUri = null, bool isSilent = false, bool isSavable = false)
{
var request = new SendPushNotificationToUsersRequest
{
Notification = new PushNotification
{
Topic = topic,
Title = title,
Subtitle = subtitle,
Body = body,
IsSilent = isSilent,
IsSavable = isSavable
}
};
request.UserIds.AddRange(userIds);
if (meta != null)
{
request.Notification.Meta = Google.Protobuf.ByteString.CopyFrom(meta);
}
if (actionUri != null)
{
request.Notification.ActionUri = actionUri;
}
await ring.SendPushNotificationToUsersAsync(request);
}
public async Task UnsubscribePushNotifications(string deviceId)
{
var request = new UnsubscribePushNotificationsRequest
{
DeviceId = deviceId
};
await ring.UnsubscribePushNotificationsAsync(request);
}
public async Task<bool> GetWebsocketConnectionStatus(string deviceIdOrUserId, bool isUserId = false)
{
var request = new GetWebsocketConnectionStatusRequest();
if (isUserId)
{
request.UserId = deviceIdOrUserId;
}
else
{
request.DeviceId = deviceIdOrUserId;
}
var response = await ring.GetWebsocketConnectionStatusAsync(request);
return response.IsConnected;
}
public async Task<Dictionary<string, bool>> GetWebsocketConnectionStatusBatch(List<string> userIds)
{
var request = new GetWebsocketConnectionStatusBatchRequest();
request.UsersId.AddRange(userIds);
var response = await ring.GetWebsocketConnectionStatusBatchAsync(request);
return response.IsConnected.ToDictionary();
}
}

View File

@@ -12,6 +12,7 @@ public static class ServiceInjectionHelper
services.AddGrpcClientWithSharedChannel<RingService.RingServiceClient>(
"https://_grpc.ring",
"RingService");
services.AddSingleton<RemoteRingService>();
return services;
}