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;
        }
예제 #2
0
        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);
            }
        }