private void TryUpdateDevice(SSDPMessage notifyMessage)
        {
            lock (this.devices)
            {
                var device = GetDevice(notifyMessage.UDN);

                if (device != null)
                {
                    device.MaxAge        = TimeSpan.FromSeconds(notifyMessage.MaxAge);
                    device.LastCheckTime = DateTime.UtcNow;

                    this.ScheduleNextCheckForExpiredDevices();

                    this.logger.LogInformation("The device lifetime has been updated", "DeviceName".As(device.FriendlyName), "DeviceUDN".As(device.UDN), "MaxAge".As(notifyMessage.MaxAge));
                }
            }
        }
        private async void TryAddDevice(SSDPMessage notifyMessage)
        {
            if (this.IsDeviceAdded(notifyMessage.UDN))
            {
                this.TryUpdateDevice(notifyMessage);
            }
            else
            {
                try
                {
                    var responseStream = await HttpClientHelper.GetAsync(notifyMessage.Location);

                    using (responseStream)
                    {
                        lock (this.devices)
                        {
                            if (this.IsDeviceAdded(notifyMessage.UDN) == false)
                            {
                                var location = new Uri(notifyMessage.Location);
                                var host     = "{0}:{1}".F(location.Host, location.Port);

                                var device = ParseDevice(host, responseStream);
                                if (device != null)
                                {
                                    device.MaxAge        = TimeSpan.FromSeconds(notifyMessage.MaxAge);
                                    device.LastCheckTime = DateTime.UtcNow;

                                    this.devices.Add(device);
                                    this.logger.LogInformation("The device has been added", "DeviceName".As(device.FriendlyName), "DeviceUDN".As(device.UDN));
                                    this.devicesActivity.OnNext(new DeviceActivityEventArgs <TDevice> {
                                        Activity = DeviceActivity.Available, Device = device
                                    });

                                    this.ScheduleNextCheckForExpiredDevices();
                                }
                            }
                        }
                    }
                }
                catch (HttpRequestException ex)
                {
                    this.logger.LogWarning(ex, "Failed to load description for device with '{0}'".F(notifyMessage));
                }
            }
        }