Directly message singaling

This commit is contained in:
2025-10-19 17:34:44 +08:00
parent 4626529eb5
commit 28d60c722a
2 changed files with 19 additions and 7 deletions

View File

@@ -19,6 +19,7 @@ public class SignalingMessage
{
public string Type { get; set; } = null!;
public object? Data { get; set; }
public string? To { get; set; }
public string? AccountId { get; set; }
public SnAccount? Account { get; set; }
}
@@ -377,9 +378,16 @@ public class RealtimeCallController(
var messageBytes = packet.ToBytes();
var segment = new ArraySegment<byte>(messageBytes);
var signalingMessage = packet.GetData<SignalingMessage>();
var targetAccountId = signalingMessage?.To;
foreach (var pair in roomDict)
{
if (pair.Key == senderId) continue;
// Skip sender unless it's broadcast message
if (!string.IsNullOrEmpty(targetAccountId) && pair.Key == senderId) continue;
// If directed message, only send to target
if (!string.IsNullOrEmpty(targetAccountId) && pair.Value.AccountId != targetAccountId) continue;
if (pair.Value.Socket.State != WebSocketState.Open) continue;
await pair.Value.Socket.SendAsync(segment, WebSocketMessageType.Text, true, CancellationToken.None);