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); } }