Device client

This commit is contained in:
熊玮 2024-11-15 10:05:49 +08:00
parent 335ea7c121
commit 25fd499773
3 changed files with 58 additions and 21 deletions

View File

@ -4,6 +4,10 @@ namespace detect.device;
public class DeviceEvent public class DeviceEvent
{ {
public const string EventAnalyzerData = "event_analyzer_data";
public const string EventDeviceConnected = "event_device_connected";
public const string EventDeviceDisConnected = "event_device_disconnected";
public string Name { get; set; } public string Name { get; set; }
public IDictionary<string, object> Result { get; set; } public IDictionary<string, object> Result { get; set; }
} }

View File

@ -42,11 +42,19 @@ public class DeviceClientSocket : TcpClient, IDeviceClient
protected override void OnConnected() protected override void OnConnected()
{ {
Log.Information("({address}:{port})OnConnected.", Address, Port); Log.Information("({address}:{port})OnConnected.", Address, Port);
PublishEvent(new DeviceEvent
{
Name = detect.device.DeviceEvent.EventDeviceConnected
});
} }
protected override void OnDisconnected() protected override void OnDisconnected()
{ {
Log.Information("({address}:{port})OnDisconnected", Address, Port); Log.Information("({address}:{port})OnDisconnected", Address, Port);
PublishEvent(new DeviceEvent
{
Name = detect.device.DeviceEvent.EventDeviceDisConnected
});
Thread.Sleep(1000); Thread.Sleep(1000);
if (!_stop) if (!_stop)
ConnectAsync(); ConnectAsync();

View File

@ -36,6 +36,17 @@ public class DeviceClientService
}); });
} }
} }
/// <summary>
/// 断开所有连接
/// </summary>
public void DisConnectAllDevices()
{
foreach (var (key, client) in _deviceClients)
{
client.DisConnectAsync();
}
}
/// <summary> /// <summary>
/// 根据设备id获取连接客户端 /// 根据设备id获取连接客户端
@ -48,6 +59,19 @@ public class DeviceClientService
return deviceClient; return deviceClient;
} }
/// <summary>
/// 刷新连接客户端,设备信息更新后调用
/// </summary>
/// <param name="deviceId"></param>
/// <returns></returns>
public IDeviceClient? RefreshDeviceClient(long deviceId)
{
_deviceClients.TryGetValue(deviceId, out var deviceClient);
deviceClient?.DisConnectAsync();
var eventService = Locator.Current.GetService<DetectDeviceService>()!;
return ConnectDevice(eventService.ListById(deviceId).Result!);
}
/// <summary> /// <summary>
/// 连接云台设备 /// 连接云台设备
/// </summary> /// </summary>
@ -55,33 +79,34 @@ public class DeviceClientService
/// <returns></returns> /// <returns></returns>
public IDeviceClient? ConnectDevice(DeviceEntity device) public IDeviceClient? ConnectDevice(DeviceEntity device)
{ {
// if (string.IsNullOrEmpty(device.DeviceIp) || string.IsNullOrEmpty(device.DevicePort)) if (string.IsNullOrEmpty(device.DeviceIp))
// { {
// Log.Warning("设备【{Name}】没有配置ip和端口不连接", device.Name); Log.Warning("设备【{Name}】没有配置ip不连接", device.Name);
// return null; return null;
// } }
_deviceClients.TryGetValue(device.Id!.Value, out var deviceClient); _deviceClients.TryGetValue(device.Id!.Value, out var deviceClient);
// if (deviceClient == null) if (deviceClient == null)
// { {
// deviceClient = new DeviceClientSocket(device.DeviceIp!, Convert.ToInt32(device.DevicePort)); deviceClient = new DeviceClientSocket(device.DeviceIp!, 13000);
// deviceClient.ConnectAsync(); deviceClient.ConnectAsync();
// _deviceClients.Add(device.Id!.Value, deviceClient); _deviceClients.Add(device.Id!.Value, deviceClient);
// } }
// else else
// { {
// if (!deviceClient.Connected()) if (!deviceClient.Connected())
// { {
// deviceClient.ConnectAsync(); deviceClient.ConnectAsync();
// } }
// } }
//
// deviceClient.DeviceEvent += DeviceClientOnDeviceEvent; deviceClient.DeviceEvent += DeviceClientOnDeviceEvent;
//
return deviceClient; return deviceClient;
} }
private void DeviceClientOnDeviceEvent(object? sender, DeviceEvent e) private void DeviceClientOnDeviceEvent(object? sender, DeviceEvent e)
{ {
Log.Information("DeviceEvent-[{Name}]:{@Result}", e.Name, e.Result);
// var deviceService = Locator.Current.GetService<VapDeviceService>()!; // var deviceService = Locator.Current.GetService<VapDeviceService>()!;
// var eventService = Locator.Current.GetService<VapEventService>()!; // var eventService = Locator.Current.GetService<VapEventService>()!;
// var constantService = Locator.Current.GetService<VapConstantService>()!; // var constantService = Locator.Current.GetService<VapConstantService>()!;