/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { List <INodeManager> nodeManagers = new List <INodeManager>(); m_availableLocales = new List <string>(); // get the configuration for the wrapper. ComWrapperServerConfiguration wrapperConfiguration = configuration.ParseExtension <ComWrapperServerConfiguration>(); if (wrapperConfiguration != null && wrapperConfiguration.WrappedServers != null) { // create a new node manager for each wrapped COM server. bool loadTypeModel = true; Dictionary <string, ComClientConfiguration> namespaceUris = new Dictionary <string, ComClientConfiguration>(); foreach (ComClientConfiguration clientConfiguration in wrapperConfiguration.WrappedServers) { // add the available locales. if (clientConfiguration.AvailableLocales != null && clientConfiguration.AvailableLocales.Count > 0) { foreach (string locale in clientConfiguration.AvailableLocales) { try { CultureInfo culture = CultureInfo.GetCultureInfo(locale); if (!m_availableLocales.Contains(culture.Name)) { m_availableLocales.Add(culture.Name); } } catch (Exception e) { Utils.Trace(e, "Can't process an invalid locale: {0}.", locale); } } } string namespaceUri = clientConfiguration.ServerUrl; if (clientConfiguration is ComDaClientConfiguration) { namespaceUri += "/DA"; if (namespaceUris.ContainsKey(namespaceUri)) { Utils.Trace("COM server has already been wrapped {0}.", namespaceUri); continue; } namespaceUris.Add(namespaceUri, clientConfiguration); ComDaClientNodeManager manager = new ComDaClientNodeManager( server, namespaceUri, (ComDaClientConfiguration)clientConfiguration, loadTypeModel); nodeManagers.Add(manager); loadTypeModel = false; continue; } if (clientConfiguration is ComAeClientConfiguration) { namespaceUri += "/AE"; if (namespaceUris.ContainsKey(namespaceUri)) { Utils.Trace("COM server has already been wrapped {0}.", namespaceUri); continue; } namespaceUris.Add(namespaceUri, clientConfiguration); ComAeClientNodeManager manager = new ComAeClientNodeManager( server, namespaceUri, (ComAeClientConfiguration)clientConfiguration, loadTypeModel); nodeManagers.Add(manager); loadTypeModel = false; continue; } if (clientConfiguration is ComHdaClientConfiguration) { namespaceUri += "/HDA"; if (namespaceUris.ContainsKey(namespaceUri)) { Utils.Trace("COM server has already been wrapped {0}.", namespaceUri); continue; } namespaceUris.Add(namespaceUri, clientConfiguration); ComHdaClientNodeManager manager = new ComHdaClientNodeManager( server, namespaceUri, (ComHdaClientConfiguration)clientConfiguration, loadTypeModel); nodeManagers.Add(manager); loadTypeModel = false; continue; } } } // create master node manager. return(new MasterNodeManager(server, configuration, null, nodeManagers.ToArray())); }
/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { List<INodeManager> nodeManagers = new List<INodeManager>(); m_availableLocales = new List<string>(); // get the configuration for the wrapper. ComWrapperServerConfiguration wrapperConfiguration = configuration.ParseExtension<ComWrapperServerConfiguration>(); if (wrapperConfiguration != null && wrapperConfiguration.WrappedServers != null) { // create a new node manager for each wrapped COM server. bool loadTypeModel = true; Dictionary<string, ComClientConfiguration> namespaceUris = new Dictionary<string, ComClientConfiguration>(); foreach (ComClientConfiguration clientConfiguration in wrapperConfiguration.WrappedServers) { // add the available locales. if (clientConfiguration.AvailableLocales != null && clientConfiguration.AvailableLocales.Count > 0) { foreach (string locale in clientConfiguration.AvailableLocales) { try { CultureInfo culture = CultureInfo.GetCultureInfo(locale); if (!m_availableLocales.Contains(culture.Name)) { m_availableLocales.Add(culture.Name); } } catch (Exception e) { Utils.Trace(e, "Can't process an invalid locale: {0}.", locale); } } } string namespaceUri = clientConfiguration.ServerUrl; if (clientConfiguration is ComDaClientConfiguration) { namespaceUri += "/DA"; if (namespaceUris.ContainsKey(namespaceUri)) { Utils.Trace("COM server has already been wrapped {0}.", namespaceUri); continue; } namespaceUris.Add(namespaceUri, clientConfiguration); ComDaClientNodeManager manager = new ComDaClientNodeManager( server, namespaceUri, (ComDaClientConfiguration)clientConfiguration, loadTypeModel); nodeManagers.Add(manager); loadTypeModel = false; continue; } if (clientConfiguration is ComAeClientConfiguration) { namespaceUri += "/AE"; if (namespaceUris.ContainsKey(namespaceUri)) { Utils.Trace("COM server has already been wrapped {0}.", namespaceUri); continue; } namespaceUris.Add(namespaceUri, clientConfiguration); ComAeClientNodeManager manager = new ComAeClientNodeManager( server, namespaceUri, (ComAeClientConfiguration)clientConfiguration, loadTypeModel); nodeManagers.Add(manager); loadTypeModel = false; continue; } if (clientConfiguration is ComHdaClientConfiguration) { namespaceUri += "/HDA"; if (namespaceUris.ContainsKey(namespaceUri)) { Utils.Trace("COM server has already been wrapped {0}.", namespaceUri); continue; } namespaceUris.Add(namespaceUri, clientConfiguration); ComHdaClientNodeManager manager = new ComHdaClientNodeManager( server, namespaceUri, (ComHdaClientConfiguration)clientConfiguration, loadTypeModel); nodeManagers.Add(manager); loadTypeModel = false; continue; } } } // create master node manager. return new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); }