diff options
Diffstat (limited to 'TAO/tao/BiDir_ORBInitializer.cpp')
-rw-r--r-- | TAO/tao/BiDir_ORBInitializer.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/TAO/tao/BiDir_ORBInitializer.cpp b/TAO/tao/BiDir_ORBInitializer.cpp new file mode 100644 index 00000000000..5552a1f20fd --- /dev/null +++ b/TAO/tao/BiDir_ORBInitializer.cpp @@ -0,0 +1,70 @@ +// -*- C++ -*- +// +// $Id$ + +#include "tao/BiDir_ORBInitializer.h" +#include "tao/BiDir_PolicyFactory.h" +#include "tao/BiDirPolicyC.h" + +ACE_RCSID (tao, BiDir_ORBInitializer, "$Id$") + + +#include "tao/ORB_Core.h" + +void +TAO_BiDir_ORBInitializer::pre_init ( + PortableInterceptor::ORBInitInfo_ptr + TAO_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // +} + +void +TAO_BiDir_ORBInitializer::post_init ( + PortableInterceptor::ORBInitInfo_ptr info + TAO_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->register_policy_factories (info + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +void +TAO_BiDir_ORBInitializer::register_policy_factories ( + PortableInterceptor::ORBInitInfo_ptr info + TAO_ENV_ARG_DECL) +{ + /// Register the BiDir policy factories. + PortableInterceptor::PolicyFactory_ptr temp_factory = + PortableInterceptor::PolicyFactory::_nil (); + PortableInterceptor::PolicyFactory_var policy_factory; + + TAO_ENV_ARG_DEFN; + + /// This policy factory is used for all BiDir related policies. + ACE_NEW_THROW_EX (temp_factory, + TAO_BiDir_PolicyFactory, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK; + + policy_factory = temp_factory; + + /// Bind the same policy factory to all BiDir related policy + /// types since a single policy factory is used to create each of + /// the different types of BiDir policies. + + CORBA::PolicyType type; + + type = BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE; + info->register_policy_factory (type, + policy_factory.in () + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; + +} |