summaryrefslogtreecommitdiff
path: root/TAO/examples/Callback_Quoter/Supplier_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/Callback_Quoter/Supplier_i.cpp')
-rw-r--r--TAO/examples/Callback_Quoter/Supplier_i.cpp125
1 files changed, 70 insertions, 55 deletions
diff --git a/TAO/examples/Callback_Quoter/Supplier_i.cpp b/TAO/examples/Callback_Quoter/Supplier_i.cpp
index bbeeb5664f6..98162d07bf2 100644
--- a/TAO/examples/Callback_Quoter/Supplier_i.cpp
+++ b/TAO/examples/Callback_Quoter/Supplier_i.cpp
@@ -28,17 +28,22 @@ Supplier::Supplier (void)
: ior_ (0),
use_naming_service_ (1),
notifier_ (),
- loop_count_ (10)
+ loop_count_ (10),
+ period_value_ (1)
{
+ // No-op.
}
Supplier::~Supplier (void)
{
+ // Release the memory allocated for ior_.
ACE_OS::free (this->ior_);
+
+ // Close the stream.
+ ACE_OS::fclose (f_ptr_);
+
ACE_DEBUG ((LM_DEBUG,
"Market Status Supplier daemon exiting!\n"));
-
-
}
// Reads the Server factory IOR from a file.
@@ -77,7 +82,7 @@ Supplier::read_ior (char *filename)
int
Supplier::parse_args (void)
{
- ACE_Get_Opt get_opts (argc_, argv_, "dn:f:xk:xs");
+ ACE_Get_Opt get_opts (argc_, argv_, "dn:fi:xk:xs");
int c;
int result;
@@ -85,19 +90,29 @@ Supplier::parse_args (void)
while ((c = get_opts ()) != -1)
switch (c)
{
- case 'd': // debug flag
+ case 'd': // Debug flag
TAO_debug_level++; //****
break;
- case 'n': // loop count
- this->loop_count_ = (u_int) ACE_OS::atoi (get_opts.optarg);
+ case 'n': // Period_value: time between two successive stockfeeds.
+ this->period_value_ = ACE_OS::atoi (get_opts.optarg);
+ break;
+
+ case 'i': // Stock market information is got from a file.
+ result = this->read_file (get_opts.optarg);
+ if (result < 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to read stock information from %s : %p\n",
+ get_opts.optarg,
+ "get_args"),
+ -1);
break;
- case 'k': // ior provide on command line
+ case 'k': // Ior provide on command line
this->ior_ = ACE_OS::strdup (get_opts.optarg);
break;
- case 'f': // read the IOR from the file.
+ case 'f': // Read the IOR from the file.
result = this->read_ior (get_opts.optarg);
if (result < 0)
ACE_ERROR_RETURN ((LM_ERROR,
@@ -107,7 +122,7 @@ Supplier::parse_args (void)
-1);
break;
- case 's': // don't use the naming service
+ case 's': // Don't use the naming service
this->use_naming_service_ = 0;
break;
@@ -116,8 +131,9 @@ Supplier::parse_args (void)
ACE_ERROR_RETURN ((LM_ERROR,
"usage: %s"
" [-d]"
- " [-n loopcount]"
+ " [-n period]"
" [-f ior-file]"
+ " [-i input_filename]"
" [-k ior]"
" [-x]"
" [-s]"
@@ -140,10 +156,9 @@ Supplier::send_market_status (const char *stock_name,
{
// Make the RMI.
this->notifier_->market_status (stock_name,
- value,
- TAO_TRY_ENV);
+ value,
+ TAO_TRY_ENV);
TAO_CHECK_ENV;
-
}
TAO_CATCHANY
{
@@ -166,41 +181,29 @@ Supplier::run (void)
ACE_DEBUG ((LM_DEBUG,
"Market Status Supplier Daemon is running...\n "));
-
- ACE_Time_Value period (1);
+ // This sets the period for the stock-feed.
+ ACE_Time_Value period (period_value_);
-
+ // "Your time starts now!" ;) the timer is scheduled to begin work.
timer_id = reactor_used ()->schedule_timer (supplier_timer_handler_,
- "Periodic stockfeed",
- period,
- period);
- if ( timer_id== -1)
- ACE_ERROR_RETURN ((LM_DEBUG, "%p\n", "schedule_timer"), -1);
+ "Periodic stockfeed",
+ period,
+ period);
+ if ( timer_id== -1)
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "%p\n",
+ "schedule_timer"),
+ -1);
// ACE_DEBUG ((LM_DEBUG,
// "cancelling timer\n"));
// this->reactor_used ()->cancel_timer (timer_id);
- /*
- // @@ Ultimately, let's replace this with an ACE_OS::sleep() call or
- // something.
- for (;;)
- {
- long value;
- char stock_name[BUFSIZ];
-
- // Obtain input from the user.
- scanf ("%s %ld", stock_name, &value);
-
- // Make a call to the method which will send the current market
- // status.
- if (this->send_market_status (stock_name, value) < 0)
- break;
- }
- */
+ // The reactor starts executing in a loop.
this->reactor_used ()->run_event_loop ();
- return 0;
+
+ return 0;
}
@@ -224,8 +227,8 @@ Supplier::via_naming_service (void)
TAO_TRY_ENV);
TAO_CHECK_ENV;
- // The CORBA::Object_var object is downcast to Notifier_var using
- // the <_narrow> method.
+ // The CORBA::Object_var object is downcast to Notifier_var
+ // using the <_narrow> method.
this->notifier_ =
Notifier::_narrow (notifier_obj.in (),
TAO_TRY_ENV);
@@ -251,13 +254,6 @@ Supplier::init (int argc, char **argv)
TAO_TRY
{
-
- // Create the Timer_Handler.
- ACE_NEW_RETURN (supplier_timer_handler_,
- Supplier_Timer_Handler (this,this->reactor_used ()),
- -1);
-
-
// Retrieve the ORB.
this->orb_ = CORBA::ORB_init (this->argc_,
this->argv_,
@@ -269,6 +265,12 @@ Supplier::init (int argc, char **argv)
if (this->parse_args () == -1)
return -1;
+ // Create the Timer_Handler.
+ ACE_NEW_RETURN (supplier_timer_handler_,
+ Supplier_Timer_Handler (this,
+ this->reactor_used (),
+ this->f_ptr_),
+ -1);
if (this->use_naming_service_)
return via_naming_service ();
@@ -277,7 +279,6 @@ Supplier::init (int argc, char **argv)
"%s: no ior specified\n",
this->argv_[0]),
-1);
-
CORBA::Object_var notifier_object =
this->orb_->string_to_object (this->ior_,
TAO_TRY_ENV);
@@ -288,9 +289,8 @@ Supplier::init (int argc, char **argv)
"invalid ior <%s>\n",
this->ior_),
-1);
-
- // The downcasting from CORBA::Object_var to Notifier_var is done
- // using the <_narrow> method.
+ // The downcasting from CORBA::Object_var to Notifier_var is
+ // done using the <_narrow> method.
this->notifier_ = Notifier::_narrow (notifier_object.in (),
TAO_TRY_ENV);
TAO_CHECK_ENV;
@@ -305,9 +305,24 @@ Supplier::init (int argc, char **argv)
return 0;
}
-
ACE_Reactor*
Supplier::reactor_used (void) const
{
- return (ACE_Reactor::instance ());
+ return ACE_Reactor::instance ();
+}
+
+// The stock market information is read from a file.
+
+int
+Supplier::read_file (char *filename)
+{
+ f_ptr_ = ACE_OS::fopen ("stocks.st", "rw");
+
+ // the stock values are to be read from a file.
+ if (f_ptr_ == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to open %s for writing: %p\n",
+ filename),
+ -1);
+ return 0;
}