public void Notify(NetworkDeviceFoundMessage message) { _log.Info($"{message.GetType().Name} received with {message.Protocol}: IP={message.IpAddress} MAC={message.MacAddress.MacAddressToString()}"); }
private async Task UpnpDeviceFound(DiscoveredSsdpDevice device) { try { UpnpDeviceResponse response; using (await _lock.LockAsync()) { response = await CreateUpnpDeviceAsync(device); if (response == null) { return; } var key = $"{device.DescriptionLocation.Host}/{response.Usn}"; DateTime lastOccurrence; if (_occurrences.TryGetValue(key, out lastOccurrence)) { if ((DateTime.UtcNow - lastOccurrence) < TimeSpan.FromMinutes(5)) { return; } } _occurrences.AddOrUpdate(key, DateTime.UtcNow, (k, v) => DateTime.UtcNow); } var message = new NetworkDeviceFoundMessage("UPNP", response.IpAddress, new byte[0], response.FriendlyName); message.Values.Add("Location", response.Location); message.Values.Add("Manufacturer", response.Manufacturer); message.Values.Add("ModelName", response.ModelName); message.Values.Add("Server", response.Server); message.Values.Add("USN", response.Usn); foreach (var pair in response.OtherHeaders) { if (!message.Values.ContainsKey(pair.Key)) { message.Values.Add(pair); } } _messageQueue.Publish(message); } catch (HttpRequestException) { } catch (WebException) { } catch (TaskCanceledException) { _log.Error($"TaskCanceledException for device {device.DescriptionLocation.OriginalString}"); } catch (XmlException e) { _log.Error($"Xml exception in {device.DescriptionLocation.OriginalString}: {e.Message}"); } catch (Exception e) { _log.Error(e.Message, e); } }