public ServiceDescription Parse(string searchResponseString) { var searchResponse = new ServiceDescription(); var lines = searchResponseString.Split('\n'); foreach (var line in lines) { var cacheControl = GetValue("CACHE-CONTROL", line); if (cacheControl != null) searchResponse.CacheControl = cacheControl; var location = GetValue("LOCATION", line); if (location != null) { if (location == "127.0.0.1") location = "http://127.0.0.1"; Uri locationUri; Uri.TryCreate(location, UriKind.RelativeOrAbsolute, out locationUri); searchResponse.Location = locationUri; } var server = GetValue("SERVER", line); if (server != null) searchResponse.Server = server; var st = GetValue("ST", line); if (st != null) searchResponse.SearchTarget = st; var usn = GetValue("USN", line); if (usn != null) searchResponse.UniqueServiceName = usn; } return searchResponse; }
private static void OnServiceDiscovered(ServiceDescription serviceDescription) { try { Console.WriteLine(); Console.WriteLine("Found NEW service: " + serviceDescription.Location); if (serviceDescription.Location.IsAbsoluteUri) { var device = DeviceParser.Load(serviceDescription.Location).Result; if (device != null) { Console.WriteLine("Device Type: " + device.DeviceType); Console.WriteLine("Firendly Name: " + device.FriendlyName); Console.WriteLine("Manufacturer: " + device.Manufacturer.Name); if (device.Manufacturer.Url != null) Console.WriteLine("Manufacturer Link: " + device.Manufacturer.Url.AbsoluteUri); if (device.Services != null) foreach (var service in device.Services) { Console.WriteLine(service.EventSubscriptionUrl.AbsoluteUri); } if (device.Services != null) foreach (var service in device.Services) { var subscriptionUrl = service.EventSubscriptionUrl; var notificationUrl = new Uri("http://" + GetIp() + ":80/notify"); //if (subscriptionUrl.AbsoluteUri.EndsWith("/MediaRenderer/RenderingControl/Event")) //{ Console.WriteLine("Using Server: " + serviceDescription.Server); Console.WriteLine("Using subscriptionUrl: " + subscriptionUrl.AbsoluteUri); Console.WriteLine("Using notify url: " + notificationUrl.AbsoluteUri); serviceDescription.Subscribe(subscriptionUrl, notificationUrl, SubscriptionTimeSpan); // } if (device.Devices != null) { Console.WriteLine("Found sub devices, count: " + device.Devices.Count); foreach (var subDevice in device.Devices) { if (subDevice.Services != null) foreach (var subDeviceService in subDevice.Services) { Console.WriteLine("Subdevice service: " + subDeviceService.EventSubscriptionUrl.AbsoluteUri); //if (subDeviceService.EventSubscriptionUrl.AbsoluteUri.EndsWith("/MediaRenderer/RenderingControl/Event")) //{ Console.WriteLine("SUBSCRIBING TO SUB SERVICE: " + subDeviceService.EventSubscriptionUrl.AbsoluteUri); serviceDescription.Subscribe(subDeviceService.EventSubscriptionUrl, notificationUrl, SubscriptionTimeSpan); //} } } } } } } } catch (Exception exception) { Console.WriteLine("ERROR: " + exception); } }