summaryrefslogtreecommitdiff
path: root/TAO/examples/RTScheduling/Starter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/RTScheduling/Starter.cpp')
-rw-r--r--TAO/examples/RTScheduling/Starter.cpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/TAO/examples/RTScheduling/Starter.cpp b/TAO/examples/RTScheduling/Starter.cpp
new file mode 100644
index 00000000000..88296f3b815
--- /dev/null
+++ b/TAO/examples/RTScheduling/Starter.cpp
@@ -0,0 +1,142 @@
+//$Id$
+
+#include "Starter.h"
+
+#include "ace/OS_NS_sys_time.h"
+
+Starter::Starter (CORBA::ORB_ptr orb)
+{
+ // Initialize the naming service
+ if (this->naming_client_.init (orb) != 0)
+ ACE_ERROR ((LM_ERROR,
+ " (%P|%t) Unable to initialize "
+ "the TAO_Naming_Client. \n"));
+}
+
+void
+Starter::init (void)
+{
+ this->resolve_synch_objs ();
+
+ this->fire ();
+}
+
+void
+Starter::fire (void)
+{
+ ACE_Time_Value base_time = ACE_OS::gettimeofday ();
+ for (Synchs::iterator iterator = this->synchs_.begin ();
+ iterator != this->synchs_.end ();
+ ++iterator)
+ {
+ (*iterator).int_id_.in ()->go (base_time.sec ());
+ }
+}
+
+void
+Starter::resolve_synch_objs (void)
+{
+ CosNaming::Name name (1);
+ name.length (1);
+
+ // Get the sender context.
+ name [0].id =
+ CORBA::string_dup ("Synch");
+
+ CORBA::Object_var object =
+ this->naming_client_->resolve (name);
+
+ this->synch_context_ =
+ CosNaming::NamingContext::_narrow (object.in ());
+
+
+ CosNaming::BindingIterator_var iterator;
+ CosNaming::BindingList_var binding_list;
+ const CORBA::ULong chunk = 100;
+
+ // Get the list of synchs registered for this sender.
+ this->synch_context_->list (chunk,
+ binding_list,
+ iterator);
+
+ // Add the receivers found in the bindinglist to the <receivers>.
+ this->add_to_synchs (binding_list);
+
+ if (!CORBA::is_nil (iterator.in ()))
+ {
+ CORBA::Boolean more = 1;
+
+ // Check to see if there are more receivers listed.
+ while (more)
+ {
+ more = iterator->next_n (chunk,
+ binding_list);
+
+ this->add_to_synchs (binding_list);
+ }
+ }
+
+}
+
+
+void
+Starter::add_to_synchs (CosNaming::BindingList &binding_list)
+{
+ ACE_Time_Value base_time = ACE_OS::gettimeofday ();
+ for (CORBA::ULong i = 0;
+ i < binding_list.length ();
+ i++)
+ {
+ // Get the receiver name from the binding list.
+ ACE_CString synch_name =
+ binding_list [i].binding_name [0].id.in ();
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Synch Name %s\n",
+ synch_name.c_str ()));
+
+ CosNaming::Name name (1);
+ name.length (1);
+ name [0].id =
+ CORBA::string_dup (synch_name.c_str ());
+
+ // Resolve the reference of the receiver from the receiver
+ // context.
+ CORBA::Object_var obj =
+ this->synch_context_->resolve (name);
+
+ Synch_var synch_obj =
+ Synch::_narrow (obj.in ());
+
+
+ synch_obj->go (base_time.sec ());
+
+// // Add this receiver to the receiver map.
+// this->synchs_.bind (synch_name,
+// synch_obj);
+ }
+}
+
+
+int
+main (int argc, char** argv)
+{
+ try
+ {
+ CORBA::ORB_var orb = CORBA::ORB_init (argc,
+ argv,
+ "");
+
+ Starter starter (orb.in ());
+
+ starter.init ();
+
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("Caught exception:");
+ return 1;
+ }
+return 0;
+}
+