Add SignalR method to request status

This commit is contained in:
2022-08-23 13:51:56 -04:00
parent 300d8ffe50
commit 6d2faa1ae1
2 changed files with 21 additions and 1 deletions

View File

@@ -28,7 +28,10 @@ public class MessageHandler : IHostedService
public async Task StartAsync(CancellationToken cancellationToken) public async Task StartAsync(CancellationToken cancellationToken)
{ {
if (!string.IsNullOrEmpty(_configuration["Hub:DeviceStatus"])) if (!string.IsNullOrEmpty(_configuration["Hub:DeviceStatus"]))
{
_hubConnection = new HubConnectionBuilder().WithUrl(_configuration["Hub:DeviceStatus"]).Build(); _hubConnection = new HubConnectionBuilder().WithUrl(_configuration["Hub:DeviceStatus"]).Build();
_hubConnection.On("RequestLatestStatus", async () => await RequestLatestStatus());
}
var mqttFactory = new MqttFactory(); var mqttFactory = new MqttFactory();
@@ -40,6 +43,12 @@ public class MessageHandler : IHostedService
await _mqttServer.StartAsync(); await _mqttServer.StartAsync();
} }
private async Task RequestLatestStatus()
{
foreach (var device in _deviceRepository.Values)
await SendDeviceStatus(device);
}
private async Task OnInterceptingPublishAsync(InterceptingPublishEventArgs arg) private async Task OnInterceptingPublishAsync(InterceptingPublishEventArgs arg)
{ {
var topic = arg.ApplicationMessage.Topic; var topic = arg.ApplicationMessage.Topic;
@@ -91,6 +100,11 @@ public class MessageHandler : IHostedService
await _laundryMonitor.HandleDeviceMessage(newDevice); await _laundryMonitor.HandleDeviceMessage(newDevice);
await SendDeviceStatus(newDevice);
}
private async Task SendDeviceStatus(Device device)
{
if (_hubConnection == null) if (_hubConnection == null)
return; return;
@@ -99,7 +113,7 @@ public class MessageHandler : IHostedService
if (_hubConnection.State == HubConnectionState.Disconnected) if (_hubConnection.State == HubConnectionState.Disconnected)
await _hubConnection.StartAsync(); await _hubConnection.StartAsync();
var json = JsonSerializer.Serialize(newDevice); var json = JsonSerializer.Serialize(device);
await _hubConnection.InvokeAsync("SendLatestStatus", json); await _hubConnection.InvokeAsync("SendLatestStatus", json);
} }

View File

@@ -8,6 +8,12 @@ namespace ChrisKaczor.HomeMonitor.Hub.Service.Hubs
[UsedImplicitly] [UsedImplicitly]
public class DeviceStatusHub : Microsoft.AspNetCore.SignalR.Hub public class DeviceStatusHub : Microsoft.AspNetCore.SignalR.Hub
{ {
[UsedImplicitly]
public async Task RequestLatestStatus()
{
await Clients.Others.SendAsync("RequestLatestStatus");
}
[UsedImplicitly] [UsedImplicitly]
public async Task SendLatestStatus(string message) public async Task SendLatestStatus(string message)
{ {