From 87b6d65a1aad0180717e697aa0dd205c865dd153 Mon Sep 17 00:00:00 2001 From: msmit Date: Mon, 24 Aug 2009 13:31:37 +0000 Subject: Mon Aug 24 13:31:57 UTC 2009 Marcel Smit * connectors/AMI_CCM/AMI/AMI_exec.h: * connectors/AMI_CCM/AMI/AMI_exec.cpp: * connectors/AMI_CCM/AMI/AMI_internal_i.h: * connectors/AMI_CCM/AMI/AMI_internal_i.cpp: * connectors/AMI_CCM/AMI/AMI_server.h: * connectors/AMI_CCM/AMI/AMI_server.cpp: * connectors/AMI_CCM/Hello_Base/Hello_Base.idl: * connectors/AMI_CCM/Receiver/Hello_Receiver_exec.h: * connectors/AMI_CCM/Receiver/Hello_Receiver_exec.cpp: * connectors/AMI_CCM/Sender/Hello_Sender.idl: * connectors/AMI_CCM/Sender/Hello_Sender_exec.h: * connectors/AMI_CCM/Sender/Hello_Sender_exec.cpp: * connectors/AMI_CCM/descriptors/Plan.cdp: Implemented synchronous calls from Sender to Receiver. Renamed some interfaces to match the CORBA specs regarding AMI. --- modules/CIAO/ChangeLog | 18 +++++ modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.cpp | 2 +- modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.h | 2 +- .../CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.cpp | 3 +- .../CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.h | 1 + modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.cpp | 2 + modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.h | 1 + .../connectors/AMI_CCM/Hello_Base/Hello_Base.idl | 4 +- .../AMI_CCM/Receiver/Hello_Receiver_exec.cpp | 2 +- .../AMI_CCM/Receiver/Hello_Receiver_exec.h | 6 +- .../connectors/AMI_CCM/Sender/Hello_Sender.idl | 5 +- .../AMI_CCM/Sender/Hello_Sender_exec.cpp | 84 ++++++++++++++++------ .../connectors/AMI_CCM/Sender/Hello_Sender_exec.h | 18 ++++- .../CIAO/connectors/AMI_CCM/descriptors/Plan.cdp | 16 +++++ 14 files changed, 129 insertions(+), 35 deletions(-) diff --git a/modules/CIAO/ChangeLog b/modules/CIAO/ChangeLog index b811864541c..d66cd75c9c2 100644 --- a/modules/CIAO/ChangeLog +++ b/modules/CIAO/ChangeLog @@ -1,3 +1,21 @@ +Mon Aug 24 13:31:57 UTC 2009 Marcel Smit + + * connectors/AMI_CCM/AMI/AMI_exec.h: + * connectors/AMI_CCM/AMI/AMI_exec.cpp: + * connectors/AMI_CCM/AMI/AMI_internal_i.h: + * connectors/AMI_CCM/AMI/AMI_internal_i.cpp: + * connectors/AMI_CCM/AMI/AMI_server.h: + * connectors/AMI_CCM/AMI/AMI_server.cpp: + * connectors/AMI_CCM/Hello_Base/Hello_Base.idl: + * connectors/AMI_CCM/Receiver/Hello_Receiver_exec.h: + * connectors/AMI_CCM/Receiver/Hello_Receiver_exec.cpp: + * connectors/AMI_CCM/Sender/Hello_Sender.idl: + * connectors/AMI_CCM/Sender/Hello_Sender_exec.h: + * connectors/AMI_CCM/Sender/Hello_Sender_exec.cpp: + * connectors/AMI_CCM/descriptors/Plan.cdp: + Implemented synchronous calls from Sender to Receiver. Renamed some + interfaces to match the CORBA specs regarding AMI. + Mon Aug 24 12:21:50 UTC 2009 Marcel Smit * connectors/AMI_CCM/AMI/AMI.mpc: diff --git a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.cpp b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.cpp index 5efb1a93c94..7eb9310b12a 100644 --- a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.cpp +++ b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.cpp @@ -215,7 +215,7 @@ namespace CIAO_Hello_AMI_AMI_Impl // Operations from ::CCM_AMI::AMI_ami_foo ::CCM_AMI::Cookie - AMI_ami_foo_exec_i::sendc_asynch_foo ( + AMI_ami_foo_exec_i::sendc_foo ( const char * in_str) { printf ("AMI :\tsendc_asynch_foo <%s>\n", in_str); diff --git a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.h b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.h index 2363a250c51..2947ebd6bd0 100644 --- a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.h +++ b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_exec.h @@ -108,7 +108,7 @@ namespace CIAO_Hello_AMI_AMI_Impl // be/be_visitor_operation/operation_ch.cpp:46 virtual ::CCM_AMI::Cookie - sendc_asynch_foo ( + sendc_foo ( const char * in_str); private: #if !defined (AMI_CORBA_IMPLEMENTATION) diff --git a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.cpp b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.cpp index 93c36e74e33..e7e8d6d612d 100644 --- a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.cpp +++ b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.cpp @@ -1,3 +1,4 @@ +// $Id$ #include "AMI_internal_i.h" @@ -14,7 +15,7 @@ AMI_internal_i::asynch_foo (const char * in_str, try { printf ("AMI CORBA :\tReceived string <%s>. Try passing it to the Receiver component\n", in_str); - CORBA::Long result = foo_receiver_->asynch_foo (CORBA::string_dup (in_str), out_str); + CORBA::Long result = foo_receiver_->foo (CORBA::string_dup (in_str), out_str); return result; } catch (CCM_AMI::InternalError& ex) diff --git a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.h b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.h index 7e3732e4678..106126a1901 100644 --- a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.h +++ b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_internal_i.h @@ -1,3 +1,4 @@ +// $Id$ #ifndef AMI_INTERNAL_I_H #define AMI_INTERNAL_I_H diff --git a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.cpp b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.cpp index b40edcb49b9..e77ad883277 100644 --- a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.cpp +++ b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.cpp @@ -1,3 +1,5 @@ +// $Id$ + #include "AMI_server.h" AMI_server::AMI_server (CORBA::ORB_ptr orb, ::CCM_AMI::AMI_foo_ptr foo_receiver) diff --git a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.h b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.h index 5f50e47beca..cae82ca3667 100644 --- a/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.h +++ b/modules/CIAO/connectors/AMI_CCM/AMI/AMI_server.h @@ -1,3 +1,4 @@ +// $Id$ #ifndef AMI_SERVER_H #define AMI_SERVER_H diff --git a/modules/CIAO/connectors/AMI_CCM/Hello_Base/Hello_Base.idl b/modules/CIAO/connectors/AMI_CCM/Hello_Base/Hello_Base.idl index bc4659fe6d7..4cca97b7506 100644 --- a/modules/CIAO/connectors/AMI_CCM/Hello_Base/Hello_Base.idl +++ b/modules/CIAO/connectors/AMI_CCM/Hello_Base/Hello_Base.idl @@ -12,7 +12,7 @@ module CCM_AMI // Sender/Receiver interface interface AMI_foo { - long asynch_foo (in string in_str, out string answer) + long foo (in string in_str, out string answer) raises (InternalError); }; @@ -27,6 +27,6 @@ module CCM_AMI // using the AMI_foo interface. interface AMI_ami_foo { - Cookie sendc_asynch_foo (in string in_str); + Cookie sendc_foo (in string in_str); }; }; diff --git a/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.cpp b/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.cpp index 327e6b628bc..750902e9470 100644 --- a/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.cpp +++ b/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.cpp @@ -48,7 +48,7 @@ namespace CIAO_Hello_AMI_Receiver_Impl // Operations from ::CCM_AMI::AMI_foo ::CORBA::Long - AMI_foo_exec_i::asynch_foo ( + AMI_foo_exec_i::foo ( const char * in_str, ::CORBA::String_out answer) { diff --git a/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.h b/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.h index 837555c9bb3..6aaee4d7c4f 100644 --- a/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.h +++ b/modules/CIAO/connectors/AMI_CCM/Receiver/Hello_Receiver_exec.h @@ -57,9 +57,9 @@ namespace CIAO_Hello_AMI_Receiver_Impl // be/be_visitor_operation/operation_ch.cpp:46 virtual ::CORBA::Long - asynch_foo ( - const char * in_str, - ::CORBA::String_out answer); + foo ( + const char * in_str, + ::CORBA::String_out answer); }; class Receiver_exec_i diff --git a/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender.idl b/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender.idl index 5d82a899440..1c7c542a35d 100644 --- a/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender.idl +++ b/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender.idl @@ -11,9 +11,12 @@ module Hello_AMI { component Sender { - //uses the ami component. + // for asynch invocation. uses CCM_AMI::AMI_ami_foo run_asynch_foo; + // for synchronous invocation + uses CCM_AMI::AMI_foo run_foo; + //provides the callback function/exception for the AMI component. provides CCM_AMI::AMI_foo_callback the_foo_callback; }; diff --git a/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.cpp b/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.cpp index 6195e6a30bd..1c5d15d4fbd 100644 --- a/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.cpp +++ b/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.cpp @@ -33,28 +33,65 @@ namespace CIAO_Hello_AMI_Sender_Impl { -pulse_generator::pulse_generator (::CCM_AMI::AMI_ami_foo_ptr foo_ami) - : foo_ami_ (::CCM_AMI::AMI_ami_foo::_duplicate (foo_ami)) -{ -} -int pulse_generator::svc () -{ - printf ("Sender :\tpulse_generator::svc\n"); + //============================================================ + // Worker thread for asynchronous invocations + //============================================================ + asynch_generator::asynch_generator (::CCM_AMI::AMI_ami_foo_ptr foo_ami) + : foo_ami_ (::CCM_AMI::AMI_ami_foo::_duplicate (foo_ami)) + { + } + + int asynch_generator::svc () + { + ACE_OS::sleep (5); + long cookie; + for (int i = 0; i < 5; ++i) + { + if (CORBA::is_nil (foo_ami_)) + printf ("Sender :\tfoo_receiver is NIL !!!\n"); + else + { + cookie = foo_ami_->sendc_foo ("Do something asynchronous"); + printf ("Sender :\tInvoked Asynchronous call. cookie <%ld>\n", cookie); + } + } + + printf ("Sender :\tInvoke Asynchronous call to test EXCEPTION HANDLING\n"); + cookie = foo_ami_->sendc_foo (""); + printf ("Sender :\tInvoked Asynchronous call. cookie <%ld>\n", cookie); + return 0; + } + + //============================================================ + // Worker thread for synchronous invocations + //============================================================ + synch_generator::synch_generator (::CCM_AMI::AMI_foo_ptr foo_ami) + : foo_ami_ (::CCM_AMI::AMI_foo::_duplicate (foo_ami)) + { + } + + int synch_generator::svc () + { ACE_OS::sleep (5); + //run synch calls + char * out_str; for (int i = 0; i < 5; ++i) { - if (CORBA::is_nil (foo_ami_)) - printf ("Sender :\tfoo_receiver is NIL !!!\n"); - else - { - long cookie = foo_ami_->sendc_asynch_foo ("Do something funny"); - printf ("Sender :\tasynch_foo has been called. <%ld> received as cookie.\n", cookie); - } + CORBA::Long result = foo_ami_->foo ("Do something synchronous", out_str); + printf ("Sender :\tInvoked synchronous call result <%d> answer <%s>\n", result, out_str); } - foo_ami_->sendc_asynch_foo (""); - return 0; -} + try + { + CORBA::Long result = foo_ami_->foo ("", out_str); + printf ("Sender :\tInvoked synchronous call result <%d> answer <%s>\n", result, out_str); + } + catch (CCM_AMI::InternalError& ex) + { + printf ("Expected Exception caught : <%d> <%s>\n", ex.id, ex.error_string.in ()); + } + return 0; + } //============================================================ // Facet Executor Implementation Class: AMI_foo_callback_exec_i @@ -135,13 +172,16 @@ int pulse_generator::svc () void Sender_exec_i::ccm_activate (void) { - ::CCM_AMI::AMI_ami_foo_var foo = + ::CCM_AMI::AMI_ami_foo_var asynch_foo = this->context_->get_connection_run_asynch_foo (); + ::CCM_AMI::AMI_foo_var synch_foo = + this->context_->get_connection_run_foo (); + + asynch_generator* asynch = new asynch_generator (asynch_foo); + asynch->activate (THR_NEW_LWP | THR_JOINABLE, 1); - this->pulser_= new pulse_generator (foo); - - this->pulser_->activate (THR_NEW_LWP | THR_JOINABLE, - 1); + synch_generator* synch = new synch_generator (synch_foo); + synch->activate (THR_NEW_LWP | THR_JOINABLE, 1); } void diff --git a/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.h b/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.h index c8acc5c4d8b..03f736b4ff3 100644 --- a/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.h +++ b/modules/CIAO/connectors/AMI_CCM/Sender/Hello_Sender_exec.h @@ -45,10 +45,11 @@ namespace CIAO_Hello_AMI_Sender_Impl { - class pulse_generator : public virtual ACE_Task_Base + // Worker thread for asynchronous invocations + class asynch_generator : public virtual ACE_Task_Base { public: - pulse_generator (::CCM_AMI::AMI_ami_foo_ptr foo_ami); + asynch_generator (::CCM_AMI::AMI_ami_foo_ptr foo_ami); virtual int svc (void); @@ -56,6 +57,18 @@ namespace CIAO_Hello_AMI_Sender_Impl ::CCM_AMI::AMI_ami_foo_var foo_ami_; }; + // Worker thread for synchronous invocations + class synch_generator : public virtual ACE_Task_Base + { + public: + synch_generator (::CCM_AMI::AMI_foo_ptr foo_ami); + + virtual int svc (void); + + private: + ::CCM_AMI::AMI_foo_var foo_ami_; + }; + class AMI_foo_callback_exec_i : public virtual ::CCM_AMI::CCM_AMI_foo_callback, @@ -116,7 +129,6 @@ namespace CIAO_Hello_AMI_Sender_Impl private: ::Hello_AMI::CCM_Sender_Context_var context_; - pulse_generator* pulser_; }; extern "C" HELLO_SENDER_EXEC_Export ::Components::EnterpriseComponent_ptr diff --git a/modules/CIAO/connectors/AMI_CCM/descriptors/Plan.cdp b/modules/CIAO/connectors/AMI_CCM/descriptors/Plan.cdp index 20016d2180a..c3888f6c917 100644 --- a/modules/CIAO/connectors/AMI_CCM/descriptors/Plan.cdp +++ b/modules/CIAO/connectors/AMI_CCM/descriptors/Plan.cdp @@ -258,6 +258,22 @@ + + synch_foo_connection + + do_asynch_foo + true + Facet + + + + run_foo + false + SimplexReceptacle + + + + Hello.ImplementationArtifacts.AMIArtifacts.AMI_svnt -- cgit v1.2.1