Files
tnb.server/WarehouseMgr/Tnb.WarehouseMgr/AgvHeartbeatMonitorService.cs

73 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JNPF;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Tnb.Common.Extension;
using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities.Configs;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// Agv心跳检测服务
/// </summary>
public class AgvHeartbeatMonitorService : BackgroundService
{
private readonly ElevatorControlConfiguration _elevatorControlConfiguration;
public bool IsStarted { get; set; }
public AgvHeartbeatMonitorService()
{
_elevatorControlConfiguration = App.Configuration.Build<ElevatorControlConfiguration>();
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
IsStarted = true;
var parameter = new Dictionary<string, string>();
parameter["DevName"] = _elevatorControlConfiguration.DevName;
parameter["TagName"] = "AGVKeepalive";
parameter["Value"] = "123";
parameter["token"] = _elevatorControlConfiguration.token;
Task.Run(async () =>
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
var result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
await Console.Out.WriteLineAsync($"心跳检测结果:{result}");
await Task.Delay(TimeSpan.FromSeconds(5));
}
catch (Exception ex)
{
throw;
}
}
});
}
public override Task StopAsync(CancellationToken cancellationToken)
{
IsStarted = false;
return Task.CompletedTask;
}
}
public static class AgvHeartbeatMonitorServiceExtenstions
{
public static IServiceCollection AddAgvHeartbeatMonitor(this IServiceCollection services)
{
return services.AddSingleton<BackgroundService, AgvHeartbeatMonitorService>();
}
}
}