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