YD_YiLu.Api/YD_YiLu/WebSockets/ICameraDeviceSocketRegistry.cs
2026-03-27 10:53:02 +08:00

35 lines
1.2 KiB
C#

using System.Collections.Concurrent;
using System.Net.WebSockets;
namespace YD_YiLu.Api.WebSockets
{
/// <summary>
/// 设备 WebSocket 连接注册表(用于小站登录、心跳及后续服务端推送)
/// </summary>
public interface ICameraDeviceSocketRegistry
{
void Register(string serialNumber, WebSocket socket);
void Unregister(string serialNumber);
bool TryGet(string serialNumber, out WebSocket socket);
}
public class CameraDeviceSocketRegistry : ICameraDeviceSocketRegistry
{
private readonly ConcurrentDictionary<string, WebSocket> _connections = new(StringComparer.OrdinalIgnoreCase);
public void Register(string serialNumber, WebSocket socket)
{
if (string.IsNullOrWhiteSpace(serialNumber)) return;
_connections[serialNumber] = socket;
}
public void Unregister(string serialNumber)
{
if (string.IsNullOrWhiteSpace(serialNumber)) return;
_connections.TryRemove(serialNumber, out _);
}
public bool TryGet(string serialNumber, out WebSocket socket) =>
_connections.TryGetValue(serialNumber ?? "", out socket);
}
}