private void MDnsDiscovery_ServiceAdded(object sender, ServiceAnnouncementEventArgs e) { if (CancelSsdpDiscoveryOnMDns) { ssdpCancellation.Cancel(); } var report = ParseServiceAnnouncement(e.Announcement); Trace.WriteLine(report); OnDeviceDiscovered(new DeviceDiscoveryEventArgs(report)); }
private void MDnsDiscovery_ServiceChanged(object sender, ServiceAnnouncementEventArgs e) { Trace.WriteLine("Service changed."); }
private void MDnsDiscovery_ServiceAdded(object sender, ServiceAnnouncementEventArgs e) { IPAddress localInterface = IPAddress.Any; // Retrieve local interface address // TODO: This will need some IPv6 love at some point if (e.Announcement.NetworkInterface.Information.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up) { var ipv4Addresses = e.Announcement.NetworkInterface.Information.GetIPProperties().UnicastAddresses.Where((ad) => ad.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork); localInterface = ipv4Addresses.FirstOrDefault().Address; } // Retrieve version string var versionTempString = e.Announcement.Txt.Where((kvp) => kvp.Contains("ve=")).FirstOrDefault(); int versionNumber = 2; if (string.IsNullOrEmpty(versionTempString) == false) { versionNumber = int.Parse(versionTempString.Split('=')[1]); } // Retrieve device ID var idTempString = e.Announcement.Txt.Where((kvp) => kvp.Contains("id=")).FirstOrDefault(); string Id = ""; if (string.IsNullOrEmpty(idTempString) == false) { Id = idTempString.Split('=')[1]; } else { // Log.Error(string.Format("Unable to get ID of device {0}", e.Announcement.Hostname)); return; } // Optional: Verify that it's a Chromecast device var tempDeviceType = e.Announcement.Txt.Where((kvp) => kvp.Contains("md=")).FirstOrDefault(); var deviceType = DeviceType.Generic; if (string.IsNullOrEmpty(tempDeviceType) == false && tempDeviceType.Split('=')[1] == "Chromecast") { deviceType = DeviceType.Chromecast; } else { deviceType = DeviceType.Generic; } // Build baseUrl // This might not be right as there URI scheme could be something else. var scheme = "http"; var address = e.Announcement.Addresses.First(); var port = e.Announcement.Port; var uri = new Uri(string.Format("{0}://{1}:{2}", scheme, address, port)); var report = new ChromecastV2DeviceDiscoveryReportItem() { DeviceType = deviceType, Version = versionNumber, Id = Id, Name = e.Announcement.Hostname, Endpoint = new IPEndPoint(e.Announcement.Addresses.First(), e.Announcement.Port), Interface = localInterface, BaseUri = uri, }; Trace.WriteLine(report); OnDeviceDiscovered(new DeviceDiscoveryEventArgs(report)); }