diff options
Diffstat (limited to 'TAO/examples/Callback_Quoter/Supplier_i.cpp')
-rw-r--r-- | TAO/examples/Callback_Quoter/Supplier_i.cpp | 125 |
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; } |