Ejemplo n.º 1
0
        /// <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();
            }
        }