using Microsoft.AspNetCore.SignalR; using RobotNet10.RobotApp.Client.Shared.Devices; using RobotNet10.RobotApp.Devices; namespace RobotNet10.RobotApp.Hubs; /// /// HubContext để broadcast device updates từ DeviceProvider /// public class DeviceHubContext(IHubContext hubContext) { /// /// Broadcast device update đến tất cả clients /// public async Task BroadcastDeviceUpdate(DeviceBase device) { var update = new DeviceUpdateDto { DeviceId = device.DeviceId, Status = device.Status, Properties = device.Properties.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), LastError = device.LastError?.Message, LastUpdateTime = device.LastUpdateStateTime, LastConnectedTime = device.LastConnectedTime, LastDisconnectedTime = device.LastDisconnectedTime, ReconnectAttemptCount = device.ReconnectAttemptCount }; await hubContext.Clients.All.SendAsync("DeviceUpdated", update); } /// /// Broadcast device status change /// public async Task BroadcastDeviceStatusChanged(string deviceId, DeviceStatus status) { await hubContext.Clients.All.SendAsync("DeviceStatusChanged", deviceId, status); } }