42 lines
1.4 KiB
C#
42 lines
1.4 KiB
C#
using Microsoft.AspNetCore.SignalR;
|
|
using RobotNet10.RobotApp.Client.Shared.Devices;
|
|
using RobotNet10.RobotApp.Devices;
|
|
|
|
namespace RobotNet10.RobotApp.Hubs;
|
|
|
|
/// <summary>
|
|
/// HubContext để broadcast device updates từ DeviceProvider
|
|
/// </summary>
|
|
public class DeviceHubContext(IHubContext<DeviceHub> hubContext)
|
|
{
|
|
/// <summary>
|
|
/// Broadcast device update đến tất cả clients
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Broadcast device status change
|
|
/// </summary>
|
|
public async Task BroadcastDeviceStatusChanged(string deviceId, DeviceStatus status)
|
|
{
|
|
await hubContext.Clients.All.SendAsync("DeviceStatusChanged", deviceId, status);
|
|
}
|
|
|
|
}
|
|
|