using System.Collections.Concurrent;
using System.Net.WebSockets;
namespace YD_YiLu.Api.WebSockets
{
///
/// 设备 WebSocket 连接注册表(用于小站登录、心跳及后续服务端推送)
///
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 _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);
}
}