summaryrefslogtreecommitdiff
path: root/CIAO/examples/Swapping/Sender/Sender_exec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/examples/Swapping/Sender/Sender_exec.cpp')
-rw-r--r--CIAO/examples/Swapping/Sender/Sender_exec.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/CIAO/examples/Swapping/Sender/Sender_exec.cpp b/CIAO/examples/Swapping/Sender/Sender_exec.cpp
new file mode 100644
index 00000000000..eeacef71fd2
--- /dev/null
+++ b/CIAO/examples/Swapping/Sender/Sender_exec.cpp
@@ -0,0 +1,196 @@
+//$Id$
+
+#include "Sender_exec.h"
+
+const char* first_exe_dll_name = "Sender_DnC_exec_1";
+const char* first_exe_entrypt = "createSenderExec_Impl";
+const char* second_exe_dll_name = "Sender_DnC_exec_2";
+const char* second_exe_entrypt = "createSenderExec_Impl";
+
+namespace CIDL_Sender_Impl
+{
+ char*
+ Message_Impl::get_message ()
+ {
+ ACE_DEBUG ((LM_DEBUG, "Sender sending out message. \n"));
+ return CORBA::string_dup (component_.message_.in ());
+ }
+
+ Sender_exec_i::~Sender_exec_i ()
+ {
+ }
+
+ void
+ Sender_exec_i::local_message (const char * local_message)
+ {
+ message_ = CORBA::string_dup (local_message);
+ }
+
+ char *
+ Sender_exec_i::local_message ()
+ {
+ return CORBA::string_dup(message_. in());
+ }
+
+ Hello::CCM_ReadMessage_ptr
+ Sender_exec_i::get_push_message ()
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Sender_exec.i::get_push_message called\n "));
+ return ( new Message_Impl (*this) );
+ }
+
+ void
+ Sender_exec_i::start ()
+ {
+ Hello::TimeOut_var event = new OBV_Hello::TimeOut;
+ ACE_DEBUG ((LM_DEBUG, "Sender initiates the process.\n"));
+ this->context_->push_click_out (event);
+ }
+
+ void
+ Sender_exec_i::set_session_context (Components::SessionContext_ptr ctx)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Sender_exec_i::set_session_context\n"));
+
+ this->context_ =
+ Sender_Exec_Context::_narrow (ctx);
+
+ if (CORBA::is_nil (this->context_.in ()))
+ {
+ throw CORBA::INTERNAL ();
+ }
+ }
+
+ void
+ Sender_exec_i::ciao_preactivate ()
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Sender_exec_i::ciao_preactivate\n"));
+ }
+
+ void
+ Sender_exec_i::ccm_activate ()
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Sender_exec_i::ccm_activate\n"));
+ }
+
+ void
+ Sender_exec_i::ciao_postactivate ()
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Sender_exec_i::ciao_postactivate\n"));
+ }
+
+ void
+ Sender_exec_i::ccm_passivate ()
+ {
+ ACE_DEBUG ((LM_DEBUG, "Sender_exec_i::ccm_passivate\n"));
+ }
+
+ void
+ Sender_exec_i::ccm_remove ()
+ {
+ ACE_DEBUG ((LM_DEBUG, "Sender_exec_i::ccm_remove\n"));
+ }
+
+
+ SenderHome_exec_i::SenderHome_exec_i ()
+ {
+ }
+
+ SenderHome_exec_i::~SenderHome_exec_i ()
+ {
+ }
+
+ SenderSwap_exec_i::SenderSwap_exec_i ()
+ : count_ (0)
+ {
+ }
+
+ SenderSwap_exec_i::~SenderSwap_exec_i ()
+ {
+ }
+
+ ::Components::EnterpriseComponent_ptr
+ SenderSwap_exec_i::incarnate ()
+ {
+ ExecFactory first_exec_creator = 0;
+ ExecFactory second_exec_creator = 0;
+ ACE_DLL first_dll, second_dll;
+
+ if (first_dll.open (first_exe_dll_name,
+ ACE_DEFAULT_SHLIB_MODE, 0) != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Could not open the DLL %s\n", first_exe_dll_name));
+ return 0;
+ }
+
+ if (second_dll.open (second_exe_dll_name,
+ ACE_DEFAULT_SHLIB_MODE, 0) != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Could not open the DLL %s\n",
+ second_exe_dll_name));
+ return 0;
+ }
+
+ if (first_exe_entrypt == 0 || second_exe_entrypt == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "NIL entry points\n"));
+ return 0;
+ }
+
+ void *void_ptr = 0;
+ ptrdiff_t tmp = 0;
+
+ if (0 == this->count_)
+ {
+ // Cast the void* to non-pointer type first - it's not legal to
+ // cast a pointer-to-object directly to a pointer-to-function.
+ void_ptr = first_dll.symbol (first_exe_entrypt);
+ tmp = reinterpret_cast<ptrdiff_t> (void_ptr);
+ first_exec_creator = reinterpret_cast<ExecFactory> (tmp);
+
+ Components::EnterpriseComponent_var first_executor =
+ first_exec_creator (this);
+ count_++;
+ return first_executor._retn ();
+ }
+ else if (-1 == count_)
+ {
+ // Cast the void* to non-pointer type first - it's not legal to
+ // cast a pointer-to-object directly to a pointer-to-function.
+ void_ptr = second_dll.symbol (second_exe_entrypt);
+ tmp = reinterpret_cast<ptrdiff_t> (void_ptr);
+ second_exec_creator = reinterpret_cast<ExecFactory> (tmp);
+
+ Components::EnterpriseComponent_var second_executor =
+ second_exec_creator (this);
+ --count_;
+ return second_executor._retn ();
+ }
+
+ return 0;
+ }
+
+ ::Components::EnterpriseComponent_ptr
+ SenderSwap_exec_i::etherealize ()
+ {
+ return 0;
+ }
+
+ ::Components::EnterpriseComponent_ptr
+ SenderHome_exec_i::create ()
+ {
+ ACE_DEBUG ((LM_DEBUG, "%P|%t) creating SenderHome \n"));
+ return new SenderSwap_exec_i;
+ }
+
+ extern "C" SENDER_EXEC_Export ::Components::HomeExecutorBase_ptr
+ createSenderHome_Impl (void)
+ {
+ return new SenderHome_exec_i ();
+ }
+}
+