using System.Net; using System.Net.Sockets; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Kurisu.Scheduled; using Kurisu.Scheduled.Attributes; using Newtonsoft.Json; namespace Dlhis.ScheduledTask.Jobs; /// /// 设备心跳 /// [RecurringJob(nameof(HeartbeatJob), "0/10 * * * * ?", Name = "设备心跳")] public class HeartbeatJob : BaseJob { public HeartbeatJob(IServiceProvider serviceProvider) : base(serviceProvider) { } public override async Task RunAsync(IServiceProvider serviceProvider) { var devices = await DbContext.Queryable().Where(x => x.Enable).Where(x => x.HeartbeatInterval > 0).ToListAsync(); foreach (var device in devices) { try { var ipInfo = JsonConvert.DeserializeObject(device.ConnectionInfo); //超时时间 var CancellationTokenSource = new CancellationTokenSource(300); await new TcpClient().ConnectAsync(IPAddress.Parse(ipInfo.IP), ipInfo.Port, CancellationTokenSource.Token); await DbContext.Updateable().SetColumns(x => x.LastHeartbeatTime == DateTime.Now) .Where(x => x.DeviceUniqueNo == device.UniqueNo).ExecuteCommandAsync(); } catch (Exception) { } } } }