// ********************************************************************** // // Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef ICE_INSTANCE_H #define ICE_INSTANCE_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Ice { class CommunicatorI; } namespace IceInternal { class Timer; typedef IceUtil::Handle TimerPtr; class MetricsAdminI; typedef IceUtil::Handle MetricsAdminIPtr; class RequestHandlerFactory; typedef IceUtil::Handle RequestHandlerFactoryPtr; class Instance : public IceUtil::Shared, public IceUtil::Monitor { public: bool destroyed() const; const Ice::InitializationData& initializationData() const { return _initData; } TraceLevelsPtr traceLevels() const; DefaultsAndOverridesPtr defaultsAndOverrides() const; RouterManagerPtr routerManager() const; LocatorManagerPtr locatorManager() const; ReferenceFactoryPtr referenceFactory() const; RequestHandlerFactoryPtr requestHandlerFactory() const; ProxyFactoryPtr proxyFactory() const; OutgoingConnectionFactoryPtr outgoingConnectionFactory() const; ObjectFactoryManagerPtr servantFactoryManager() const; ObjectAdapterFactoryPtr objectAdapterFactory() const; ProtocolSupport protocolSupport() const; bool preferIPv6() const; NetworkProxyPtr networkProxy() const; ThreadPoolPtr clientThreadPool(); ThreadPoolPtr serverThreadPool(); EndpointHostResolverPtr endpointHostResolver(); RetryQueuePtr retryQueue(); IceUtil::TimerPtr timer(); EndpointFactoryManagerPtr endpointFactoryManager() const; DynamicLibraryListPtr dynamicLibraryList() const; Ice::PluginManagerPtr pluginManager() const; size_t messageSizeMax() const { return _messageSizeMax; } size_t batchAutoFlushSize() const { return _batchAutoFlushSize; } bool collectObjects() const { return _collectObjects; } const ACMConfig& clientACM() const; const ACMConfig& serverACM() const; Ice::Identity stringToIdentity(const std::string&) const; std::string identityToString(const Ice::Identity&) const; Ice::ObjectPrx createAdmin(const Ice::ObjectAdapterPtr&, const Ice::Identity&); Ice::ObjectPrx getAdmin(); void addAdminFacet(const Ice::ObjectPtr&, const std::string&); Ice::ObjectPtr removeAdminFacet(const std::string&); Ice::ObjectPtr findAdminFacet(const std::string&); Ice::FacetMap findAllAdminFacets(); const Ice::ImplicitContextIPtr& getImplicitContext() const { return _implicitContext; } void setDefaultLocator(const Ice::LocatorPrx&); void setDefaultRouter(const Ice::RouterPrx&); void setLogger(const Ice::LoggerPtr&); void setThreadHook(const Ice::ThreadNotificationPtr&); IceUtil::StringConverterPtr getStringConverter() const { return _stringConverter; } IceUtil::WstringConverterPtr getWstringConverter() const { return _wstringConverter; } private: Instance(const Ice::CommunicatorPtr&, const Ice::InitializationData&); virtual ~Instance(); void finishSetup(int&, char*[], const Ice::CommunicatorPtr&); void destroy(); friend class Ice::CommunicatorI; void updateConnectionObservers(); void updateThreadObservers(); friend class ObserverUpdaterI; void addAllAdminFacets(); void setServerProcessProxy(const Ice::ObjectAdapterPtr&, const Ice::Identity&); enum State { StateActive, StateDestroyInProgress, StateDestroyed }; State _state; Ice::InitializationData _initData; const TraceLevelsPtr _traceLevels; // Immutable, not reset by destroy(). const DefaultsAndOverridesPtr _defaultsAndOverrides; // Immutable, not reset by destroy(). const size_t _messageSizeMax; // Immutable, not reset by destroy(). const size_t _batchAutoFlushSize; // Immutable, not reset by destroy(). const bool _collectObjects; // Immutable, not reset by destroy(). ACMConfig _clientACM; ACMConfig _serverACM; RouterManagerPtr _routerManager; LocatorManagerPtr _locatorManager; ReferenceFactoryPtr _referenceFactory; RequestHandlerFactoryPtr _requestHandlerFactory; ProxyFactoryPtr _proxyFactory; OutgoingConnectionFactoryPtr _outgoingConnectionFactory; ObjectFactoryManagerPtr _servantFactoryManager; ObjectAdapterFactoryPtr _objectAdapterFactory; ProtocolSupport _protocolSupport; bool _preferIPv6; NetworkProxyPtr _networkProxy; ThreadPoolPtr _clientThreadPool; ThreadPoolPtr _serverThreadPool; EndpointHostResolverPtr _endpointHostResolver; RetryQueuePtr _retryQueue; TimerPtr _timer; EndpointFactoryManagerPtr _endpointFactoryManager; DynamicLibraryListPtr _dynamicLibraryList; Ice::PluginManagerPtr _pluginManager; const Ice::ImplicitContextIPtr _implicitContext; IceUtil::StringConverterPtr _stringConverter; IceUtil::WstringConverterPtr _wstringConverter; bool _adminEnabled; Ice::ObjectAdapterPtr _adminAdapter; Ice::FacetMap _adminFacets; Ice::Identity _adminIdentity; std::set _adminFacetFilter; IceInternal::MetricsAdminIPtr _metricsAdmin; }; class ProcessI : public Ice::Process { public: ProcessI(const Ice::CommunicatorPtr&); virtual void shutdown(const Ice::Current&); virtual void writeMessage(const std::string&, Ice::Int, const Ice::Current&); private: const Ice::CommunicatorPtr _communicator; }; } #endif