diff options
author | jai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2007-01-29 21:15:18 +0000 |
---|---|---|
committer | jai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2007-01-29 21:15:18 +0000 |
commit | b71531b42b3325fd6079a7039aae8641262c8adf (patch) | |
tree | a5b9aa16924c541fcb424ee9460b1ac7f5a89352 /modules/CIAO/ciao/Port_Activator_T.cpp | |
parent | a0f67cc97c0050d907145e312135b60c0125e56e (diff) | |
download | ATCD-b71531b42b3325fd6079a7039aae8641262c8adf.tar.gz |
branching/taggingDS-main
Diffstat (limited to 'modules/CIAO/ciao/Port_Activator_T.cpp')
-rw-r--r-- | modules/CIAO/ciao/Port_Activator_T.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/modules/CIAO/ciao/Port_Activator_T.cpp b/modules/CIAO/ciao/Port_Activator_T.cpp new file mode 100644 index 00000000000..b6bc950a642 --- /dev/null +++ b/modules/CIAO/ciao/Port_Activator_T.cpp @@ -0,0 +1,83 @@ +// $Id$ + +#ifndef CIAO_PORT_ACTIVATOR_T_CPP +#define CIAO_PORT_ACTIVATOR_T_CPP + +#include "Port_Activator_T.h" +#include "tao/CORBA_String.h" + +#include "ace/OS_NS_string.h" + + +namespace CIAO +{ + template <typename SERV, + typename EXEC, + typename CONTEXT, + typename COMP_SERV> + Port_Activator_T<SERV, EXEC, CONTEXT, COMP_SERV>::Port_Activator_T ( + const char *oid, + const char *name, + Port_Activator::Type t, + EXEC *e, + CONTEXT *c, + COMP_SERV *cc) + : Port_Activator (oid, name, t) + , executor_ (e) + , context_ (c) + , comp_serv_ (cc) + { + } + + template <typename SERV, + typename EXEC, + typename CONTEXT, + typename COMP_SERV> + void + Port_Activator_T<SERV, EXEC, CONTEXT, COMP_SERV>::deactivate ( + const PortableServer::Servant servant) + { + SERVANT *s = dynamic_cast<SERVANT *> (servant); + s->_remove_ref (); + } + + template <typename SERV, + typename EXEC, + typename CONTEXT, + typename COMP_SERV> + PortableServer::Servant + Port_Activator_T<SERV, EXEC, CONTEXT, COMP_SERV>::activate ( + const PortableServer::ObjectId &oid) + { + CORBA::String_var str = + PortableServer::ObjectId_to_string (oid); + + // An additional check, may not be necessary. Being on the safe + // side. + if (ACE_OS::strcmp (this->oid_.in (), + str.in ()) == 0) + { + if (this->executor_ == 0 && + this->t_ == Port_Activator::Facet) + { + CORBA::Object_var tmp = + this->comp_serv_->get_facet_executor (this->name_.in ()); + + this->executor_ = EXEC::_narrow (tmp.in ()); + } + + SERVANT *s = 0; + + ACE_NEW_THROW_EX (s, + SERVANT (this->executor_, + this->context_), + CORBA::NO_MEMORY ()); + return s; + } + + ACE_THROW_RETURN (CORBA::OBJECT_NOT_EXIST (), + 0); + } +} + +#endif /*SERVANT_ACTIVATOR_T_CPP*/ |