Пример #1
0
        /// <summary>
        /// Given a <paramref name="deviceDescriptor"/>, this method extracts two kinds of data:
        /// <list type="bullet">
        /// <item><see cref="ServiceDescriptor"/>s for services of the given device and all embedded devices (organized in a dictionary mapping
        /// device UUIDs to dictionaries mapping service type and version to service descriptors for all services in the device) in
        /// <paramref name="serviceDescriptors"/></item>
        /// <item>A collection of all service descriptors which are returned in <paramref name="serviceDescriptors"/>
        /// in <paramref name="pendingServiceDescriptions"/></item>
        /// </list>
        /// </summary>
        /// <param name="deviceDescriptor">Descriptor of the device to start extracting service descriptors.</param>
        /// <param name="serviceDescriptors">Dictionary of device UUIDs to dictionaries mapping service type and version to service descriptors of services
        /// which are contained in the device with the key UUID.</param>
        /// <param name="pendingServiceDescriptions">Dictionary of device service descriptors mapped to the SCPD url of the
        /// service.</param>
        private static void ExtractServiceDescriptorsRecursive(DeviceDescriptor deviceDescriptor,
                                                               IDictionary <string, IDictionary <string, ServiceDescriptor> > serviceDescriptors,
                                                               ICollection <ServiceDescriptor> pendingServiceDescriptions)
        {
            string deviceUuid = deviceDescriptor.DeviceUUID;
            ICollection <ServiceDescriptor> services = deviceDescriptor.CreateServiceDescriptors();

            if (services.Count > 0)
            {
                IDictionary <string, ServiceDescriptor> sds = serviceDescriptors[deviceUuid] = new Dictionary <string, ServiceDescriptor>();
                foreach (ServiceDescriptor service in services)
                {
                    sds.Add(service.ServiceTypeVersion_URN, service);
                    pendingServiceDescriptions.Add(service);
                }
            }
            foreach (DeviceDescriptor childDevice in deviceDescriptor.ChildDevices)
            {
                ExtractServiceDescriptorsRecursive(childDevice, serviceDescriptors, pendingServiceDescriptions);
            }
        }