YD_YiLu.Api/YD_YiLu/WebSockets/DeviceCommandService.cs

104 lines
3.3 KiB
C#
Raw Normal View History

2026-04-02 11:42:03 +08:00
using YD_YiLu.Api.WebSockets;
namespace YD_YiLu.Api.Services
{
public class DeviceCommandService
{
private readonly ICameraDeviceSocketRegistry _registry;
public DeviceCommandService(ICameraDeviceSocketRegistry registry)
{
_registry = registry;
}
#region 通用发送
private async Task<bool> Send(string sn, string request, object data, CancellationToken ct)
{
if (!_registry.TryGet(sn, out var socket))
return false;
await DeviceWebSocketSender.SendAsync(socket, request, data, ct);
return true;
}
#endregion
// ================================
// 1️⃣ 信息提醒
// ================================
public Task<bool> Remind(string sn, int type, string msg, CancellationToken ct)
{
return Send(sn, "station:remind", new
{
remindType = type,
remindMessage = msg,
time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}, ct);
}
// ================================
// 2️⃣ 控制设备(重启/关机)
// ================================
public Task<bool> Control(string sn, int code, string type, CancellationToken ct)
{
return Send(sn, "station:control", new
{
controlCode = code,
controlType = type,
time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}, ct);
}
// ================================
// 3️⃣ 推送APK更新
// ================================
public Task<bool> PushApk(string sn, string version, int force, string url, string hardware, CancellationToken ct)
{
return Send(sn, "apk:version:download", new
{
versionNumber = version,
needForcedUpdating = force,
updateUrl = url,
hardwareType = hardware,
time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}, ct);
}
// ================================
// 4️⃣ 获取现场截图
// ================================
public Task<bool> GetPicture(string sn, int courseId, CancellationToken ct)
{
return Send(sn, "station:intercept:picture", new
{
remindType = 1,
courseId = courseId
}, ct);
}
// ================================
// 5️⃣ 获取默认标定
// ================================
public Task<bool> GetDefaultCalibration(string sn, int courseId, CancellationToken ct)
{
return Send(sn, "station:default:calibration", new
{
remindType = 1,
courseId = courseId
}, ct);
}
// ================================
// 6️⃣ 推送最新标定
// ================================
public Task<bool> UpdateCalibration(string sn, string calibrationJson, int courseId, CancellationToken ct)
{
return Send(sn, "station:update:calibration", new
{
calibrationJson = calibrationJson,
courseId = courseId
}, ct);
}
}
}