diff options
author | kirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-15 18:58:06 +0000 |
---|---|---|
committer | kirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-15 18:58:06 +0000 |
commit | 633c266d3f57d8eebc5e4162f483ecc2fbc2298f (patch) | |
tree | 35e8a8facc6510afaaec90fbd91363c1576c410a | |
parent | 40f083deca49d062cd1537904a1de6040ec369b4 (diff) | |
download | ATCD-633c266d3f57d8eebc5e4162f483ecc2fbc2298f.tar.gz |
*** empty log message ***
-rw-r--r-- | TAO/ChangeLog-98c | 9 | ||||
-rw-r--r-- | TAO/examples/Callback_Quoter/Supplier_i.cpp | 257 | ||||
-rw-r--r-- | TAO/examples/Callback_Quoter/Supplier_i.h | 93 |
3 files changed, 358 insertions, 1 deletions
diff --git a/TAO/ChangeLog-98c b/TAO/ChangeLog-98c index a7cd06bfd14..68849b70583 100644 --- a/TAO/ChangeLog-98c +++ b/TAO/ChangeLog-98c @@ -1,8 +1,15 @@ +Thu Oct 15 13:54:23 1998 Kirthika Parameswaran <kirthika@cs.wustl.edu> + + * examples/Callback_Quoter/Supplier_i.cpp: + examples/Callback_Quoter/Supplier_i.h + Changed the names as they conflicted with (lowercase) + supplier.cpp on NT. + Thu Oct 15 13:22:39 1998 Jeff Parsons <jp4@cs.wustl.edu> * TAO/tests/Param_Test/param_test_i.cpp: Added a Param_Test:: qualifier to declaration of - PathSpec_var rPathSpec - got rid of a compile error. + PathSpec_var rPathSpec - got rid of a compile error. Thu Oct 15 10:49:58 1998 David L. Levine <levine@cs.wustl.edu> diff --git a/TAO/examples/Callback_Quoter/Supplier_i.cpp b/TAO/examples/Callback_Quoter/Supplier_i.cpp new file mode 100644 index 00000000000..c7bb81537bb --- /dev/null +++ b/TAO/examples/Callback_Quoter/Supplier_i.cpp @@ -0,0 +1,257 @@ +// $Id$ + +#include "ace/Get_Opt.h" +#include "ace/Read_Buffer.h" +#include "Supplier_i.h" + +ACE_RCSID(Callback_Quoter, Supplier, "$Id$") + +// Constructor. + +Supplier::Supplier (void) + : ior_ (0), + loop_count_ (10), + notifier_ (), + use_naming_service_ (1) +{ +} + +Supplier::~Supplier (void) +{ + ACE_OS::free (this->ior_); + ACE_DEBUG ((LM_DEBUG, + "Marketfeed daemon exiting!\n")); +} + +// Reads the Server factory IOR from a file. + +int +Supplier::read_ior (char *filename) +{ + // Open the file for reading. + ACE_HANDLE f_handle = ACE_OS::open (filename, 0); + + if (f_handle == ACE_INVALID_HANDLE) + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to open %s for writing: %p\n", + filename), + -1); + + ACE_Read_Buffer ior_buffer (f_handle); + char *data = ior_buffer.read (); + + if (data == 0) + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to read ior: %p\n"), + -1); + + this->ior_ = ACE_OS::strdup (data); + ior_buffer.alloc ()->free (data); + + ACE_OS::close (f_handle); + + return 0; +} + +// Parses the command line arguments and returns an error status. + +int +Supplier::parse_args (void) +{ + ACE_Get_Opt get_opts (argc_, argv_, "dn:f:xk:xs"); + + int c; + int result; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'd': // debug flag + TAO_debug_level++; //**** + break; + + case 'n': // loop count + this->loop_count_ = (u_int) ACE_OS::atoi (get_opts.optarg); + break; + + case 'k': // ior provide on command line + this->ior_ = ACE_OS::strdup (get_opts.optarg); + break; + + case 'f': // read the IOR from the file. + result = this->read_ior (get_opts.optarg); + if (result < 0) + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to read ior from %s : %p\n", + get_opts.optarg), + -1); + break; + + case 's': // don't use the naming service + this->use_naming_service_ = 0; + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s" + " [-d]" + " [-n loopcount]" + " [-f ior-file]" + " [-k ior]" + " [-x]" + " [-s]" + "\n", + this->argv_ [0]), + -1); + } + + // Indicates successful parsing of command line. + return 0; +} + +// Give the stock status information to the Notifier. + +int +Supplier::send_market_status (const char *stock_name, + long value) +{ + TAO_TRY + { + // Make the RMI. + this->notifier_->market_status (stock_name, + value, + TAO_TRY_ENV); + TAO_CHECK_ENV; + + } + TAO_CATCHANY + { + ACE_ERROR_RETURN ((LM_ERROR, + "Exception raised!\n"), + -1); + } + TAO_ENDTRY; + return 0; +} + +// Execute client example code. + +int +Supplier::run (void) +{ + ACE_DEBUG ((LM_DEBUG, + "MarketFeed Daemon is running...\n ")); + + // @@ 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; + } + + return 0; +} + +int +Supplier::via_naming_service (void) +{ + TAO_TRY + { + // Initialization of the naming service. + if (naming_services_client_.init (orb_.in ()) != 0) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Unable to initialize " + "the TAO_Naming_Client. \n"), + -1); + CosNaming::Name notifier_ref_name (1); + notifier_ref_name.length (1); + notifier_ref_name[0].id = CORBA::string_dup ("Notifier"); + + CORBA::Object_var notifier_obj = + this->naming_services_client_->resolve (notifier_ref_name, + TAO_TRY_ENV); + TAO_CHECK_ENV; + + // The CORBA::Object_var object is downcast to Notifier_var using + // the <_narrow> method. + this->notifier_ = + Notifier::_narrow (notifier_obj.in (), + TAO_TRY_ENV); + TAO_CHECK_ENV; + } + TAO_CATCHANY + { + TAO_TRY_ENV.print_exception ("Supplier::via_naming_service\n"); + return -1; + } + TAO_ENDTRY; + + return 0; +} + +// Init function. + +int +Supplier::init (int argc, char **argv) +{ + this->argc_ = argc; + this->argv_ = argv; + + TAO_TRY + { + // Retrieve the ORB. + this->orb_ = CORBA::ORB_init (this->argc_, + this->argv_, + 0, + TAO_TRY_ENV); + TAO_CHECK_ENV; + + // Parse command line and verify parameters. + if (this->parse_args () == -1) + return -1; + + if (this->use_naming_service_) + return via_naming_service (); + + if (this->ior_ == 0) + ACE_ERROR_RETURN ((LM_ERROR, + "%s: no ior specified\n", + this->argv_[0]), + -1); + + CORBA::Object_var notifier_object = + this->orb_->string_to_object (this->ior_, + TAO_TRY_ENV); + TAO_CHECK_ENV; + + if (CORBA::is_nil (notifier_object.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + "invalid ior <%s>\n", + this->ior_), + -1); + + // 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; + } + TAO_CATCHANY + { + TAO_TRY_ENV.print_exception ("Supplier::init"); + return -1; + } + TAO_ENDTRY; + + return 0; +} diff --git a/TAO/examples/Callback_Quoter/Supplier_i.h b/TAO/examples/Callback_Quoter/Supplier_i.h new file mode 100644 index 00000000000..bf614646cbf --- /dev/null +++ b/TAO/examples/Callback_Quoter/Supplier_i.h @@ -0,0 +1,93 @@ +// -*- C++ -*- +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/examples/Callback_Quoter +// +// = FILENAME +// MarketFeed.h +// +// = DESCRIPTION +// This class implements a simple CORBA server that keeps +// on sending stock values to the Notifier. +// +// = AUTHORS +// Kirthika Parameswaran <kirthika@cs.wustl.edu> +// +// ============================================================================ + +#include "orbsvcs/Naming/Naming_Utils.h" +#include "orbsvcs/CosNamingC.h" +#include "NotifierC.h" + +class Supplier +{ + // = TITLE + // Market feed daemon implementation. + // + // = DESCRIPTION + // Class wrapper for a daemon which keeps sending + // current stock values to the Callback Quoter server. +public: + // = Initialization and termination methods. + Supplier (void); + // Constructor. + + ~Supplier (void); + // Destructor. + + int run (void); + // Execute the daemon. + + int init (int argc, char *argv[]); + // Initialize the client communication endpoint with Notifier. + +private: + int read_ior (char *filename); + // Function to read the Notifier IOR from a file. + + int parse_args (void); + // Parses the arguments passed on the command line. + + int via_naming_service(void); + // This method initialises the naming service and registers the + // object with the POA. + + int send_market_status (const char *stock_name, + long value); + // Sends the stock name and its value. + + int argc_; + // # of arguments on the command line. + + char **argv_; + // arguments from command line. + + char *ior_; + // IOR of the obj ref of the Notifier. + + u_int feed_time; + // Time period between two succesive market feeds to the Notifier. + + CORBA::Environment env_; + // Environment variable. + + TAO_Naming_Client naming_services_client_; + // An instance of the name client used for resolving the factory + // objects. + + int use_naming_service_; + // This variable denotes whether the naming service + // is used or not. + + Notifier_var notifier_; + // Notifier object reference. + + CORBA::ORB_var orb_; + // Remember our orb. + + int loop_count_; + // Iteration count. +}; |