/// <summary> /// Adds devices found in the ARP scan. /// </summary> /// <param name="deviceInfos"></param> public void AddDevices(List <DeviceInfo> deviceInfos) { // get a list of all devices not present in this list, and update those to cable disconnected. foreach (DeviceInfo device in deviceInfos) { string mac = device.DeviceMac.Replace("-", ":").Replace(" ", "").ToLower(); string deviceId = Convert.ToBase64String(Encoding.Default.GetBytes(mac)); DeviceInfo fndDevice = GetDeviceById(deviceId); if (fndDevice == null) { fndDevice = new DeviceInfo { DeviceName = device.DeviceName, DeviceId = deviceId, DeviceMac = mac, DeviceIp = device.DeviceIp, DeviceConnected = device.DeviceConnected, LastUpdate = device.LastUpdate }; Devices.Add(fndDevice); DB.AddDeviceAsync(fndDevice).Wait(); BConsole.WriteLine($"Added device {mac} {fndDevice.DeviceIp}"); } else { fndDevice.DeviceIp = device.DeviceIp ?? fndDevice.DeviceIp; fndDevice.DeviceName = device.DeviceName ?? fndDevice.DeviceName; if (string.IsNullOrEmpty(fndDevice.Host)) { fndDevice.DeviceConnected = true; fndDevice.Host = APMapping.CABLE; } else if (fndDevice.Host == APMapping.CABLE || fndDevice.Host == APMapping.CABLE_DISCONNECTED) { fndDevice.DeviceConnected = true; fndDevice.Host = APMapping.CABLE; } DB.UpdateDeviceAsync(fndDevice).Wait(); BConsole.WriteLine($"Updated device {mac} {fndDevice.DeviceIp}"); } } var CurrentConnectedDevices = new HashSet <string>(deviceInfos.Select(n => n.DeviceMac)); var CurrentNotConnectedDevices = Devices.Where(n => (!CurrentConnectedDevices.Contains(n.DeviceMac) && (n.Host == APMapping.CABLE || n.Host == APMapping.CABLE_DISCONNECTED))).ToList(); foreach (DeviceInfo device in CurrentNotConnectedDevices) { string mac = device.DeviceMac.Replace("-", ":").Replace(" ", "").ToLower(); string deviceId = Convert.ToBase64String(Encoding.Default.GetBytes(mac)); DeviceInfo fndDevice = GetDeviceById(deviceId); fndDevice.Host = APMapping.CABLE_DISCONNECTED; fndDevice.DeviceConnected = false; fndDevice.LastUpdate = DateTime.Now; DB.UpdateDeviceAsync(fndDevice).Wait(); } }