35 lines
1.2 KiB
C#
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);
|
|
}
|
|
} |