Ice 3.7 C++11 API Reference
Initialize.h
Go to the documentation of this file.
1 //
2 // Copyright (c) ZeroC, Inc. All rights reserved.
3 //
4 
5 #ifndef ICE_INITIALIZE_H
6 #define ICE_INITIALIZE_H
7 
8 #include <IceUtil/Timer.h>
9 #include <Ice/Communicator.h>
10 #include <Ice/PropertiesF.h>
11 #include <Ice/InstanceF.h>
12 #include <Ice/LoggerF.h>
13 #include <Ice/InstrumentationF.h>
14 #include <Ice/Dispatcher.h>
15 #include <Ice/FactoryTable.h>
16 #include <Ice/BuiltinSequences.h>
17 #include <Ice/Version.h>
18 #include <Ice/Plugin.h>
20 
21 #ifdef ICE_CPP11_MAPPING
22 # define ICE_CONFIG_FILE_STRING const std::string&
23 #else
24 # define ICE_CONFIG_FILE_STRING const char*
25 #endif
26 
27 namespace Ice
28 {
29 
36 ICE_API StringSeq argsToStringSeq(int argc, const char* const argv[]);
37 
38 #ifdef _WIN32
39 
45 ICE_API StringSeq argsToStringSeq(int argc, const wchar_t* const argv[]);
46 #endif
47 
58 ICE_API void stringSeqToArgs(const StringSeq& seq, int& argc, const char* argv[]);
59 
70 inline void stringSeqToArgs(const StringSeq& seq, int& argc, char* argv[])
71 {
72  return stringSeqToArgs(seq, argc, const_cast<const char**>(argv));
73 }
74 
75 #ifdef _WIN32
76 
84 ICE_API void stringSeqToArgs(const StringSeq& seq, int& argc, const wchar_t* argv[]);
85 
94 inline void stringSeqToArgs(const StringSeq& seq, int& argc, wchar_t* argv[])
95 {
96  return stringSeqToArgs(seq, argc, const_cast<const wchar_t**>(argv));
97 }
98 #endif
99 
105 ICE_API PropertiesPtr createProperties();
106 
124 ICE_API PropertiesPtr createProperties(StringSeq& seq, const PropertiesPtr& defaults = 0);
125 
145 ICE_API PropertiesPtr createProperties(int& argc, const char* argv[], const PropertiesPtr& defaults = 0);
146 
166 inline PropertiesPtr createProperties(int& argc, char* argv[], const PropertiesPtr& defaults = 0)
167 {
168  return createProperties(argc, const_cast<const char**>(argv), defaults);
169 }
170 
171 #ifdef _WIN32
172 
191 ICE_API PropertiesPtr createProperties(int& argc, const wchar_t* argv[], const PropertiesPtr& defaults = 0);
192 
212 inline PropertiesPtr createProperties(int& argc, wchar_t* argv[], const PropertiesPtr& defaults = 0)
213 {
214  return createProperties(argc, const_cast<const wchar_t**>(argv), defaults);
215 }
216 #endif
217 
225 {
226 public:
227 
231  virtual void start() = 0;
232 
236  virtual void stop() = 0;
237 };
238 
240 
247 {
248 public:
249 
250 #ifdef ICE_CPP11_MAPPING
251 
257  ThreadHookPlugin(const CommunicatorPtr& communicator, std::function<void()> start, std::function<void()> stop);
258 #else
259 
264  ThreadHookPlugin(const CommunicatorPtr& communicator, const ThreadNotificationPtr& hook);
265 #endif
266 
268  virtual void initialize();
269 
271  virtual void destroy();
272 };
273 
279 {
283  PropertiesPtr properties;
284 
288  LoggerPtr logger;
289 
293  Instrumentation::CommunicatorObserverPtr observer;
294 
295 #ifdef ICE_CPP11_MAPPING
296 
297 #if defined(__clang__)
298 # pragma clang diagnostic push
299 # pragma clang diagnostic ignored "-Wdocumentation" // param/return is not recognized for std::function data members
300 #endif
301 
305  std::function<void()> threadStart;
306 
310  std::function<void()> threadStop;
311 
326  std::function<void(std::function<void()> call, const std::shared_ptr<Ice::Connection>& con)> dispatcher;
327 
338  std::function<std::string(int id)> compactIdResolver;
339 
346  std::function<void(const Ice::BatchRequest& req, int count, int size)> batchRequestInterceptor;
347 
348 #if defined(__clang__)
349 # pragma clang diagnostic pop
350 #endif
351 
352 #else
353 
356  ThreadNotificationPtr threadHook;
357 
370  DispatcherPtr dispatcher;
371 
380 
384  BatchRequestInterceptorPtr batchRequestInterceptor;
385 #endif
386 
390  ValueFactoryManagerPtr valueFactoryManager;
391 };
392 
408 ICE_API CommunicatorPtr initialize(int& argc, const char* argv[],
409  const InitializationData& initData = InitializationData(),
410  int version = ICE_INT_VERSION);
411 
427 inline CommunicatorPtr initialize(int& argc, char* argv[], const InitializationData& initData = InitializationData(),
428  int version = ICE_INT_VERSION)
429 {
430  return initialize(argc, const_cast<const char**>(argv), initData, version);
431 }
432 
448 ICE_API CommunicatorPtr initialize(int& argc, const char* argv[], ICE_CONFIG_FILE_STRING configFile,
449  int version = ICE_INT_VERSION);
450 
466 inline CommunicatorPtr initialize(int& argc, char* argv[], ICE_CONFIG_FILE_STRING configFile,
467  int version = ICE_INT_VERSION)
468 {
469  return initialize(argc, const_cast<const char**>(argv), configFile, version);
470 }
471 
472 #ifdef _WIN32
473 
488 ICE_API CommunicatorPtr initialize(int& argc, const wchar_t* argv[],
489  const InitializationData& initData = InitializationData(),
490  int version = ICE_INT_VERSION);
491 
507 inline CommunicatorPtr initialize(int& argc, wchar_t* argv[], const InitializationData& initData = InitializationData(),
508  int version = ICE_INT_VERSION)
509 {
510  return initialize(argc, const_cast<const wchar_t**>(argv), initData, version);
511 }
512 
528 ICE_API CommunicatorPtr initialize(int& argc, const wchar_t* argv[], ICE_CONFIG_FILE_STRING configFile,
529  int version = ICE_INT_VERSION);
530 
546 inline CommunicatorPtr initialize(int& argc, wchar_t* argv[], ICE_CONFIG_FILE_STRING configFile,
547  int version = ICE_INT_VERSION)
548 {
549  return initialize(argc, const_cast<const wchar_t**>(argv), configFile, version);
550 }
551 #endif
552 
566 ICE_API CommunicatorPtr initialize(StringSeq& seq, const InitializationData& initData = InitializationData(),
567  int version = ICE_INT_VERSION);
568 
582 ICE_API CommunicatorPtr initialize(StringSeq& seq, ICE_CONFIG_FILE_STRING configFile, int version = ICE_INT_VERSION);
583 
591 ICE_API CommunicatorPtr initialize(const InitializationData& initData = InitializationData(),
592  int version = ICE_INT_VERSION);
593 
601 ICE_API CommunicatorPtr initialize(ICE_CONFIG_FILE_STRING configFile, int version = ICE_INT_VERSION);
602 
609 
615 ICE_API void setProcessLogger(const LoggerPtr& logger);
616 
624 typedef Ice::Plugin* (*PluginFactory)(const ::Ice::CommunicatorPtr& communicator, const std::string& name,
625  const ::Ice::StringSeq& args);
626 
635 ICE_API void registerPluginFactory(const std::string& name, PluginFactory factory, bool loadOnInit);
636 
643 {
644 public:
645 
650 
651 #ifdef ICE_CPP11_MAPPING
652 
658  template<class... T>
659  explicit CommunicatorHolder(T&&... args) :
660  _communicator(std::move(initialize(std::forward<T>(args)...)))
661  {
662  }
663 
668  CommunicatorHolder(std::shared_ptr<Communicator> communicator);
669 
675  CommunicatorHolder& operator=(std::shared_ptr<Communicator> communicator);
676 
679 
686 
691  explicit operator bool() const;
692 
693 #else // C++98 mapping
694 
709  CommunicatorHolder(int& argc, const char* argv[], const InitializationData& initData = InitializationData(),
710  int version = ICE_INT_VERSION);
711 
726  CommunicatorHolder(int& argc, char* argv[], const InitializationData& initData = InitializationData(),
727  int version = ICE_INT_VERSION);
728 
743  CommunicatorHolder(int& argc, const char* argv[], const char* configFile, int version = ICE_INT_VERSION);
744 
759  CommunicatorHolder(int& argc, char* argv[], const char* configFile, int version = ICE_INT_VERSION);
760 
761 # ifdef _WIN32
762 
776  CommunicatorHolder(int& argc, const wchar_t* argv[], const InitializationData& initData = InitializationData(),
777  int version = ICE_INT_VERSION);
778 
793  CommunicatorHolder(int& argc, wchar_t* argv[], const InitializationData& initData = InitializationData(),
794  int version = ICE_INT_VERSION);
795 
810  CommunicatorHolder(int& argc, const wchar_t* argv[], const char* configFile, int version = ICE_INT_VERSION);
811 
826  CommunicatorHolder(int& argc, wchar_t* argv[], const char* configFile, int version = ICE_INT_VERSION);
827 # endif
828 
841  explicit CommunicatorHolder(StringSeq& seq, const InitializationData& initData = InitializationData(),
842  int version = ICE_INT_VERSION);
843 
856  CommunicatorHolder(StringSeq& seq, const char* configFile, int version = ICE_INT_VERSION);
857 
864  explicit CommunicatorHolder(const InitializationData& initData, int version = ICE_INT_VERSION);
865 
872  explicit CommunicatorHolder(const char* configFile, int version = ICE_INT_VERSION);
873 
878  CommunicatorHolder(const CommunicatorPtr& communicator);
879 
885  CommunicatorHolder& operator=(const CommunicatorPtr& communicator);
886 
891  operator bool() const;
892 
894  //
895  // Required for successful copy-initialization, but not
896  // defined as it should always be elided by the compiler.
899 
900 #endif
901 
903 
908  const CommunicatorPtr& communicator() const;
909 
914  const CommunicatorPtr& operator->() const;
915 
920  CommunicatorPtr release();
921 
922 private:
923 
924  CommunicatorPtr _communicator;
925 };
926 
932 ICE_API Identity stringToIdentity(const std::string& str);
933 
940 ICE_API std::string identityToString(const Identity& id, ToStringMode mode = ICE_ENUM(ToStringMode, Unicode));
941 
942 }
943 
944 namespace IceInternal
945 {
946 
947 //
948 // Some Ice extensions need access to the Ice internal instance. Do
949 // not use this operation for regular application code! It is intended
950 // to be used by modules such as Freeze.
951 //
952 ICE_API InstancePtr getInstance(const ::Ice::CommunicatorPtr&);
953 ICE_API IceUtil::TimerPtr getInstanceTimer(const ::Ice::CommunicatorPtr&);
954 
955 }
956 
957 #endif
Ice::BatchRequest
Represents an invocation on a proxy configured for batch-oneway or batch-datagram.
Definition: BatchRequestInterceptor.h:19
Ice::CommunicatorHolder
A helper class that uses Resource Acquisition Is Initialization (RAII) to initialize and hold a commu...
Definition: Initialize.h:643
Ice::ThreadNotification::stop
virtual void stop()=0
Called from an Ice thread that is about to stop.
Ice::ThreadHookPlugin::destroy
virtual void destroy()
Not used.
Dispatcher.h
Ice::ThreadHookPlugin::initialize
virtual void initialize()
Not used.
Ice::CommunicatorHolder::communicator
const CommunicatorPtr & communicator() const
Obtains the communicator instance.
Ice::CommunicatorHolder::CommunicatorHolder
CommunicatorHolder(T &&... args)
Calls initialize to create a communicator with the provided arguments.
Definition: Initialize.h:659
Ice::Plugin
A communicator plug-in.
Definition: Plugin.h:78
Ice::createProperties
PropertiesPtr createProperties()
Creates a new empty property set.
Ice::CommunicatorHolder::CommunicatorHolder
CommunicatorHolder(CommunicatorHolder &&)=default
InstanceF.h
Ice::CommunicatorHolder::operator->
const CommunicatorPtr & operator->() const
Obtains the communicator instance.
ICE_ENUM
#define ICE_ENUM(CLASS, ENUMERATOR)
Definition: Config.h:360
Ice::ThreadNotification::start
virtual void start()=0
Called from the new Ice thread at startup.
BatchRequestInterceptor.h
Ice::PluginFactory
Ice::Plugin *(* PluginFactory)(const ::Ice::CommunicatorPtr &communicator, const std::string &name, const ::Ice::StringSeq &args)
A plug-in factory function is responsible for creating an Ice plug-in.
Definition: Initialize.h:624
Ice::InitializationData::valueFactoryManager
ValueFactoryManagerPtr valueFactoryManager
The value factory manager.
Definition: Initialize.h:390
Ice::registerPluginFactory
void registerPluginFactory(const std::string &name, PluginFactory factory, bool loadOnInit)
Manually registers a plug-in factory function.
PropertiesF.h
Ice::InitializationData::properties
PropertiesPtr properties
The properties for the communicator.
Definition: Initialize.h:283
Ice::ThreadNotification
Base class for a thread notification hook.
Definition: Initialize.h:225
Ice::InitializationData::batchRequestInterceptor
std::function< void(const Ice::BatchRequest &req, int count, int size)> batchRequestInterceptor
The batch request interceptor, which is called by the Ice run time to enqueue a batch request.
Definition: Initialize.h:346
ICE_API
#define ICE_API
Definition: Config.h:197
ICE_CONFIG_FILE_STRING
#define ICE_CONFIG_FILE_STRING
Definition: Initialize.h:22
Ice::initialize
CommunicatorPtr initialize(int &argc, const char *argv[], const InitializationData &initData=InitializationData(), int version=30710)
Initializes a new communicator.
Ice::ToStringMode
ToStringMode
The output mode for xxxToString method such as identityToString and proxyToString.
Definition: Communicator.h:92
ICE_INT_VERSION
#define ICE_INT_VERSION
Definition: Config.h:272
Ice::stringToIdentity
Identity stringToIdentity(const std::string &str)
Converts a stringified identity into an Identity.
Version.h
Ice::identityToString
std::string identityToString(const Identity &id, ToStringMode mode=ToStringMode ::Unicode)
Converts an Identity structure into a string using the specified mode.
Ice::CommunicatorHolder::release
CommunicatorPtr release()
Obtains the communicator instance and clears the reference held by the holder.
Ice::stringSeqToArgs
void stringSeqToArgs(const StringSeq &seq, int &argc, const char *argv[])
Updates the argument vector to match the contents of the string sequence.
Ice::CommunicatorHolder::operator=
CommunicatorHolder & operator=(std::shared_ptr< Communicator > communicator)
Adopts the given communicator.
Timer.h
Ice::CommunicatorHolder::CommunicatorHolder
CommunicatorHolder()
The holder's initial state is empty.
Ice::CommunicatorHolder::CommunicatorHolder
CommunicatorHolder(const CommunicatorHolder &)=delete
Plugin.h
Ice::setProcessLogger
void setProcessLogger(const LoggerPtr &logger)
Sets the per-process logger.
Ice::CommunicatorHolder::operator=
CommunicatorHolder & operator=(CommunicatorHolder &&holder) noexcept
Adopts the communicator in the given holder.
Ice::InitializationData::observer
Instrumentation::CommunicatorObserverPtr observer
The communicator observer used by the Ice run-time.
Definition: Initialize.h:293
Ice::InitializationData::threadStart
std::function< void()> threadStart
Called whenever the communicator starts a new thread.
Definition: Initialize.h:305
Ice::ThreadNotificationPtr
IceUtil::Handle< ThreadNotification > ThreadNotificationPtr
Definition: Initialize.h:239
FactoryTable.h
Ice::argsToStringSeq
StringSeq argsToStringSeq(int argc, const char *const argv[])
Converts an argument vector into a string sequence.
Ice::InitializationData::compactIdResolver
std::function< std::string(int id)> compactIdResolver
Applications that make use of compact type IDs to conserve space when marshaling class instances,...
Definition: Initialize.h:338
Ice::StringSeq
::std::vector<::std::string > StringSeq
A sequence of strings.
Definition: BuiltinSequences.h:96
Ice
Definition: BuiltinSequences.h:56
Ice::getProcessLogger
LoggerPtr getProcessLogger()
Obtains the per-process logger.
Ice::ThreadHookPlugin
A special plug-in that installs a thread hook during a communicator's initialization.
Definition: Initialize.h:247
IceUtil::Handle
Definition: Handle.h:143
Ice::CommunicatorHolder::CommunicatorHolder
CommunicatorHolder(std::shared_ptr< Communicator > communicator)
Adopts the given communicator.
InstrumentationF.h
BuiltinSequences.h
Ice::InitializationData::dispatcher
std::function< void(std::function< void()> call, const std::shared_ptr< Ice::Connection > &con)> dispatcher
You can control which thread receives operation invocations and AMI callbacks by supplying a dispatch...
Definition: Initialize.h:326
Ice::CommunicatorHolder::~CommunicatorHolder
~CommunicatorHolder()
Communicator.h
Ice::InitializationData::threadStop
std::function< void()> threadStop
Called whenever a thread created by the communicator is about to be destroyed.
Definition: Initialize.h:310
Ice::InitializationData
Encapsulates data to initialize a communicator.
Definition: Initialize.h:279
Ice::Identity
The identity of an Ice object.
Definition: Identity.h:67
Ice::InitializationData::logger
LoggerPtr logger
The logger for the communicator.
Definition: Initialize.h:288
LoggerF.h
IceUtil::Shared
Definition: Shared.h:78
Ice::ThreadHookPlugin::ThreadHookPlugin
ThreadHookPlugin(const CommunicatorPtr &communicator, std::function< void()> start, std::function< void()> stop)
Installs the thread hooks.