diff --git a/detect.device/DeviceClient.cs b/detect.device/DeviceClient.cs index d44372f..2d66683 100644 --- a/detect.device/DeviceClient.cs +++ b/detect.device/DeviceClient.cs @@ -4,6 +4,10 @@ namespace detect.device; 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 IDictionary Result { get; set; } } diff --git a/detect.device/DeviceClientSocket.cs b/detect.device/DeviceClientSocket.cs index 9ea1a0c..11d0017 100644 --- a/detect.device/DeviceClientSocket.cs +++ b/detect.device/DeviceClientSocket.cs @@ -42,11 +42,19 @@ public class DeviceClientSocket : TcpClient, IDeviceClient protected override void OnConnected() { Log.Information("({address}:{port})OnConnected.", Address, Port); + PublishEvent(new DeviceEvent + { + Name = detect.device.DeviceEvent.EventDeviceConnected + }); } protected override void OnDisconnected() { Log.Information("({address}:{port})OnDisconnected", Address, Port); + PublishEvent(new DeviceEvent + { + Name = detect.device.DeviceEvent.EventDeviceDisConnected + }); Thread.Sleep(1000); if (!_stop) ConnectAsync(); diff --git a/detect.gui/Services/DeviceClientService.cs b/detect.gui/Services/DeviceClientService.cs index 37521b9..28b89bc 100644 --- a/detect.gui/Services/DeviceClientService.cs +++ b/detect.gui/Services/DeviceClientService.cs @@ -36,6 +36,17 @@ public class DeviceClientService }); } } + + /// + /// 断开所有连接 + /// + public void DisConnectAllDevices() + { + foreach (var (key, client) in _deviceClients) + { + client.DisConnectAsync(); + } + } /// /// 根据设备id获取连接客户端 @@ -48,6 +59,19 @@ public class DeviceClientService return deviceClient; } + /// + /// 刷新连接客户端,设备信息更新后调用 + /// + /// + /// + public IDeviceClient? RefreshDeviceClient(long deviceId) + { + _deviceClients.TryGetValue(deviceId, out var deviceClient); + deviceClient?.DisConnectAsync(); + var eventService = Locator.Current.GetService()!; + return ConnectDevice(eventService.ListById(deviceId).Result!); + } + /// /// 连接云台设备 /// @@ -55,33 +79,34 @@ public class DeviceClientService /// public IDeviceClient? ConnectDevice(DeviceEntity device) { - // if (string.IsNullOrEmpty(device.DeviceIp) || string.IsNullOrEmpty(device.DevicePort)) - // { - // Log.Warning("设备【{Name}】没有配置ip和端口,不连接", device.Name); - // return null; - // } + if (string.IsNullOrEmpty(device.DeviceIp)) + { + Log.Warning("设备【{Name}】没有配置ip,不连接", device.Name); + return null; + } _deviceClients.TryGetValue(device.Id!.Value, out var deviceClient); - // if (deviceClient == null) - // { - // deviceClient = new DeviceClientSocket(device.DeviceIp!, Convert.ToInt32(device.DevicePort)); - // deviceClient.ConnectAsync(); - // _deviceClients.Add(device.Id!.Value, deviceClient); - // } - // else - // { - // if (!deviceClient.Connected()) - // { - // deviceClient.ConnectAsync(); - // } - // } - // - // deviceClient.DeviceEvent += DeviceClientOnDeviceEvent; - // + if (deviceClient == null) + { + deviceClient = new DeviceClientSocket(device.DeviceIp!, 13000); + deviceClient.ConnectAsync(); + _deviceClients.Add(device.Id!.Value, deviceClient); + } + else + { + if (!deviceClient.Connected()) + { + deviceClient.ConnectAsync(); + } + } + + deviceClient.DeviceEvent += DeviceClientOnDeviceEvent; + return deviceClient; } private void DeviceClientOnDeviceEvent(object? sender, DeviceEvent e) { + Log.Information("DeviceEvent-[{Name}]:{@Result}", e.Name, e.Result); // var deviceService = Locator.Current.GetService()!; // var eventService = Locator.Current.GetService()!; // var constantService = Locator.Current.GetService()!;