// // Only for use by Ice.CommunicatorI // public Instance(Ice.Communicator communicator, Ice.InitializationData initData) { _state = StateActive; _initData = initData; try { if(_initData.properties == null) { _initData.properties = Ice.Util.createProperties(); } #if !SILVERLIGHT && !UNITY lock(_staticLock) { if(!_oneOffDone) { string stdOut = _initData.properties.getProperty("Ice.StdOut"); string stdErr = _initData.properties.getProperty("Ice.StdErr"); System.IO.StreamWriter outStream = null; if(stdOut.Length > 0) { try { outStream = System.IO.File.AppendText(stdOut); } catch(System.IO.IOException ex) { Ice.FileException fe = new Ice.FileException(ex); fe.path = stdOut; throw fe; } outStream.AutoFlush = true; System.Console.Out.Close(); System.Console.SetOut(outStream); } if(stdErr.Length > 0) { if(stdErr.Equals(stdOut)) { System.Console.SetError(outStream); } else { System.IO.StreamWriter errStream = null; try { errStream = System.IO.File.AppendText(stdErr); } catch(System.IO.IOException ex) { Ice.FileException fe = new Ice.FileException(ex); fe.path = stdErr; throw fe; } errStream.AutoFlush = true; System.Console.Error.Close(); System.Console.SetError(errStream); } } _oneOffDone = true; } } #endif if(_initData.logger == null) { #if !SILVERLIGHT && !UNITY string logfile = _initData.properties.getProperty("Ice.LogFile"); if(_initData.properties.getPropertyAsInt("Ice.UseSyslog") > 0 && AssemblyUtil.platform_ != AssemblyUtil.Platform.Windows) { if(logfile.Length != 0) { throw new Ice.InitializationException("Ice.LogFile and Ice.UseSyslog cannot both be set."); } _initData.logger = new Ice.SysLoggerI(_initData.properties.getProperty("Ice.ProgramName"), _initData.properties.getPropertyWithDefault("Ice.SyslogFacility", "LOG_USER")); } else if(logfile.Length != 0) { _initData.logger = new Ice.FileLoggerI(_initData.properties.getProperty("Ice.ProgramName"), logfile); } else if(Ice.Util.getProcessLogger() is Ice.LoggerI) { // // Ice.ConsoleListener is enabled by default. // # if COMPACT _initData.logger = new Ice.ConsoleLoggerI(_initData.properties.getProperty("Ice.ProgramName")); # else bool console = _initData.properties.getPropertyAsIntWithDefault("Ice.ConsoleListener", 1) == 1; _initData.logger = new Ice.TraceLoggerI(_initData.properties.getProperty("Ice.ProgramName"), console); # endif } #else if(Ice.Util.getProcessLogger() is Ice.LoggerI) { _initData.logger = new Ice.ConsoleLoggerI(_initData.properties.getProperty("Ice.ProgramName")); } #endif else { _initData.logger = Ice.Util.getProcessLogger(); } } _traceLevels = new TraceLevels(_initData.properties); _defaultsAndOverrides = new DefaultsAndOverrides(_initData.properties); #if COMPACT || SILVERLIGHT char[] separators = { ' ', '\t', '\n', '\r' }; _factoryAssemblies = _initData.properties.getProperty("Ice.FactoryAssemblies").Split(separators); #endif { const int defaultMessageSizeMax = 1024; int num = _initData.properties.getPropertyAsIntWithDefault("Ice.MessageSizeMax", defaultMessageSizeMax); if(num < 1) { _messageSizeMax = defaultMessageSizeMax * 1024; // Ignore non-sensical values. } else if(num > 0x7fffffff / 1024) { _messageSizeMax = 0x7fffffff; } else { _messageSizeMax = num * 1024; // Property is in kilobytes, _messageSizeMax in bytes } } // // Client ACM enabled by default. Server ACM disabled by default. // _clientACM = _initData.properties.getPropertyAsIntWithDefault("Ice.ACM.Client", 60); _serverACM = _initData.properties.getPropertyAsInt("Ice.ACM.Server"); _implicitContext = Ice.ImplicitContextI.create(_initData.properties.getProperty("Ice.ImplicitContext")); _routerManager = new RouterManager(); _locatorManager = new LocatorManager(_initData.properties); _referenceFactory = new ReferenceFactory(this, communicator); _proxyFactory = new ProxyFactory(this); bool ipv4 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0; bool ipv6 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv6", 1) > 0; if(!ipv4 && !ipv6) { throw new Ice.InitializationException("Both IPV4 and IPv6 support cannot be disabled."); } else if(ipv4 && ipv6) { _protocolSupport = Network.EnableBoth; } else if(ipv4) { _protocolSupport = Network.EnableIPv4; } else { _protocolSupport = Network.EnableIPv6; } _preferIPv6 = _initData.properties.getPropertyAsInt("Ice.PreferIPv6Address") > 0; _endpointFactoryManager = new EndpointFactoryManager(this); EndpointFactory tcpEndpointFactory = new TcpEndpointFactory(this); _endpointFactoryManager.add(tcpEndpointFactory); EndpointFactory udpEndpointFactory = new UdpEndpointFactory(this); _endpointFactoryManager.add(udpEndpointFactory); #if !SILVERLIGHT _pluginManager = new Ice.PluginManagerI(communicator); #endif _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this); _servantFactoryManager = new ObjectFactoryManager(); _objectAdapterFactory = new ObjectAdapterFactory(this, communicator); _retryQueue = new RetryQueue(this); string[] facetFilter = _initData.properties.getPropertyAsList("Ice.Admin.Facets"); if(facetFilter.Length > 0) { foreach(string s in facetFilter) { _adminFacetFilter.Add(s); } } _adminFacets.Add("Process", new ProcessI(communicator)); MetricsAdminI admin = new MetricsAdminI(_initData.properties, _initData.logger); _adminFacets.Add("Metrics", admin); PropertiesAdminI props = new PropertiesAdminI("Properties", _initData.properties, _initData.logger); _adminFacets.Add("Properties", props); // // Setup the communicator observer only if the user didn't already set an // Ice observer resolver and if the admininistrative endpoints are set. // if(_initData.observer == null && (_adminFacetFilter.Count == 0 || _adminFacetFilter.Contains("Metrics")) && _initData.properties.getProperty("Ice.Admin.Endpoints").Length > 0) { CommunicatorObserverI observer = new CommunicatorObserverI(admin); _initData.observer = observer; // // Make sure the admin plugin receives property updates. // props.addUpdateCallback(admin); } }
public void finishSetup(ref string[] args, Ice.Communicator communicator) { // // Load plug-ins. // Debug.Assert(_serverThreadPool == null); Ice.PluginManagerI pluginManagerImpl = (Ice.PluginManagerI)_pluginManager; pluginManagerImpl.loadPlugins(ref args); // // Add WS and WSS endpoint factories if TCP/SSL factories are installed. // EndpointFactory tcpFactory = _endpointFactoryManager.get(Ice.TCPEndpointType.value); if(tcpFactory != null) { ProtocolInstance instance = new ProtocolInstance(this, Ice.WSEndpointType.value, "ws", false); _endpointFactoryManager.add(new WSEndpointFactory(instance, tcpFactory.clone(instance, null))); } EndpointFactory sslFactory = _endpointFactoryManager.get(Ice.SSLEndpointType.value); if(sslFactory != null) { ProtocolInstance instance = new ProtocolInstance(this, Ice.WSSEndpointType.value, "wss", true); _endpointFactoryManager.add(new WSEndpointFactory(instance, sslFactory.clone(instance, null))); } // // Create Admin facets, if enabled. // // Note that any logger-dependent admin facet must be created after we load all plugins, // since one of these plugins can be a Logger plugin that sets a new logger during loading // if(_initData.properties.getProperty("Ice.Admin.Enabled").Length == 0) { _adminEnabled = _initData.properties.getProperty("Ice.Admin.Endpoints").Length > 0; } else { _adminEnabled = _initData.properties.getPropertyAsInt("Ice.Admin.Enabled") > 0; } string[] facetFilter = _initData.properties.getPropertyAsList("Ice.Admin.Facets"); if(facetFilter.Length > 0) { foreach(string s in facetFilter) { _adminFacetFilter.Add(s); } } if(_adminEnabled) { // // Process facet // string processFacetName = "Process"; if(_adminFacetFilter.Count == 0 || _adminFacetFilter.Contains(processFacetName)) { _adminFacets.Add(processFacetName, new ProcessI(communicator)); } // // Logger facet // string loggerFacetName = "Logger"; if(_adminFacetFilter.Count == 0 || _adminFacetFilter.Contains(loggerFacetName)) { LoggerAdminLogger logger = new LoggerAdminLoggerI(_initData.properties, _initData.logger); setLogger(logger); _adminFacets.Add(loggerFacetName, logger.getFacet()); } // // Properties facet // string propertiesFacetName = "Properties"; PropertiesAdminI propsAdmin = null; if(_adminFacetFilter.Count == 0 || _adminFacetFilter.Contains(propertiesFacetName)) { propsAdmin= new PropertiesAdminI(this); _adminFacets.Add(propertiesFacetName, propsAdmin); } // // Metrics facet // string metricsFacetName = "Metrics"; if(_adminFacetFilter.Count == 0 || _adminFacetFilter.Contains(metricsFacetName)) { CommunicatorObserverI observer = new CommunicatorObserverI(_initData); _initData.observer = observer; _adminFacets.Add(metricsFacetName, observer.getFacet()); // // Make sure the admin plugin receives property updates. // if(propsAdmin != null) { propsAdmin.addUpdateCallback(observer.getFacet()); } } } // // Set observer updater // if(_initData.observer != null) { _initData.observer.setObserverUpdater(new ObserverUpdaterI(this)); } // // Create threads. // try { if(initializationData().properties.getProperty("Ice.ThreadPriority").Length > 0) { ThreadPriority priority = IceInternal.Util.stringToThreadPriority( initializationData().properties.getProperty("Ice.ThreadPriority")); _timer = new Timer(this, priority); } else { _timer = new Timer(this); } } catch(System.Exception ex) { string s = "cannot create thread for timer:\n" + ex; _initData.logger.error(s); throw; } try { _endpointHostResolver = new EndpointHostResolver(this); } catch(System.Exception ex) { string s = "cannot create thread for endpoint host resolver:\n" + ex; _initData.logger.error(s); throw; } _clientThreadPool = new ThreadPool(this, "Ice.ThreadPool.Client", 0); // // The default router/locator may have been set during the loading of plugins. // Therefore we make sure it is not already set before checking the property. // if(_referenceFactory.getDefaultRouter() == null) { Ice.RouterPrx r = Ice.RouterPrxHelper.uncheckedCast( _proxyFactory.propertyToProxy("Ice.Default.Router")); if(r != null) { _referenceFactory = _referenceFactory.setDefaultRouter(r); } } if(_referenceFactory.getDefaultLocator() == null) { Ice.LocatorPrx l = Ice.LocatorPrxHelper.uncheckedCast( _proxyFactory.propertyToProxy("Ice.Default.Locator")); if(l != null) { _referenceFactory = _referenceFactory.setDefaultLocator(l); } } // // Show process id if requested (but only once). // lock(this) { if(!_printProcessIdDone && _initData.properties.getPropertyAsInt("Ice.PrintProcessId") > 0) { using(Process p = Process.GetCurrentProcess()) { System.Console.WriteLine(p.Id); } _printProcessIdDone = true; } } // // Server thread pool initialization is lazy in serverThreadPool(). // // // An application can set Ice.InitPlugins=0 if it wants to postpone // initialization until after it has interacted directly with the // plug-ins. // if(_initData.properties.getPropertyAsIntWithDefault("Ice.InitPlugins", 1) > 0) { pluginManagerImpl.initializePlugins(); } // // This must be done last as this call creates the Ice.Admin object adapter // and eventually registers a process proxy with the Ice locator (allowing // remote clients to invoke on Ice.Admin facets as soon as it's registered). // if(_initData.properties.getPropertyAsIntWithDefault("Ice.Admin.DelayCreation", 0) <= 0) { getAdmin(); } }