internal static CpService ConnectService(DeviceConnection connection, CpDevice parentDevice, ServiceDescriptor serviceDescriptor, DataTypeResolverDlgt dataTypeResolver) { lock (connection.CPData.SyncObj) { CpService result = new CpService(connection, parentDevice, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion, serviceDescriptor.ServiceId); XPathNavigator serviceNav = serviceDescriptor.ServiceDescription.CreateNavigator(); serviceNav.MoveToChild(XPathNodeType.Element); XmlNamespaceManager nsmgr = new XmlNamespaceManager(serviceNav.NameTable); nsmgr.AddNamespace("s", UPnPConsts.NS_SERVICE_DESCRIPTION); XPathNodeIterator svIt = serviceNav.Select("s:serviceStateTable/s:stateVariable", nsmgr); // State variables must be connected first because they are needed from the action's arguments while (svIt.MoveNext()) { result.AddStateVariable(CpStateVariable.ConnectStateVariable(connection, result, svIt.Current, nsmgr, dataTypeResolver)); } XPathNodeIterator acIt = serviceNav.Select("s:actionList/s:action", nsmgr); while (acIt.MoveNext()) { result.AddAction(CpAction.ConnectAction(connection, result, acIt.Current, nsmgr)); } return(result); } }
internal static CpService ConnectService(DeviceConnection connection, CpDevice parentDevice, ServiceDescriptor serviceDescriptor, DataTypeResolverDlgt dataTypeResolver) { lock (connection.CPData.SyncObj) { CpService result = new CpService(connection, parentDevice, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion, serviceDescriptor.ServiceId); XPathNavigator serviceNav = serviceDescriptor.ServiceDescription.CreateNavigator(); serviceNav.MoveToChild(XPathNodeType.Element); XmlNamespaceManager nsmgr = new XmlNamespaceManager(serviceNav.NameTable); nsmgr.AddNamespace("s", UPnPConsts.NS_SERVICE_DESCRIPTION); XPathNodeIterator svIt = serviceNav.Select("s:serviceStateTable/s:stateVariable", nsmgr); // State variables must be connected first because they are needed from the action's arguments while (svIt.MoveNext()) result.AddStateVariable(CpStateVariable.ConnectStateVariable(connection, result, svIt.Current, nsmgr, dataTypeResolver)); XPathNodeIterator acIt = serviceNav.Select("s:actionList/s:action", nsmgr); while (acIt.MoveNext()) result.AddAction(CpAction.ConnectAction(connection, result, acIt.Current, nsmgr)); return result; } }