summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-15 18:58:06 +0000
committerkirthika <kirthika@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-15 18:58:06 +0000
commit633c266d3f57d8eebc5e4162f483ecc2fbc2298f (patch)
tree35e8a8facc6510afaaec90fbd91363c1576c410a
parent40f083deca49d062cd1537904a1de6040ec369b4 (diff)
downloadATCD-633c266d3f57d8eebc5e4162f483ecc2fbc2298f.tar.gz
*** empty log message ***
-rw-r--r--TAO/ChangeLog-98c9
-rw-r--r--TAO/examples/Callback_Quoter/Supplier_i.cpp257
-rw-r--r--TAO/examples/Callback_Quoter/Supplier_i.h93
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.
+};