Listing 8: Client main driver in CORBA application

//
// File: client.cpp
//
#include <OB/CORBA.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>

#include "fortune.h"
int
main(int argc, char* argv[]) {

 try {
   // Init ORB
   CORBA_ORB_var orb = CORBA_ORB_init(argc, argv);
   // Obtain externalized Factory object reference.
   const char* refFile = "factory.ior";
   ifstream in; in.open(refFile);
   if(in.fail()){
      cerr << "Can't open " << refFile << " for reading." << endl;
      return 1;
   }

   char s[1000]; in >> s;
   CORBA_Object_var obj = orb -> string_to_object(s);
   assert(!CORBA_is_nil(obj));

   // Narrow object reference
   Fortune_Factory_var fv = Fortune_Factory::_narrow(obj);
   assert(!CORBA_is_nil(fv));

   int month = 0;
   int done = 0;
   cout << "Enter month value (1 to 12" << ", 0 to quit)" << endl;

   // Loop
   while (done == 0) {
      cout << "\nMonth: ";
      cin >> month;
      if (month != 0) {
       // Get fortune server
       Fortune_Teller_var tv = fv->getFortune(month);
       assert(!CORBA_is_nil(tv));
      
       // Display results
       cout << "Fortune for " << tv->getMessage() << endl;
       cout << "Lucky # is: " << tv->getLuckyNumber() << endl;
      }
      else { done = 1; }
    }
  }
  // Check for error conditions
  catch(Fortune_Factory::outOfBounds&)
  {
    cerr << "Month value was out "
         << "of bounds ... exiting."
         << endl;
    return 1;
  }
  catch(CORBA_SystemException& ex)
  { 
    cerr << "Communications failure:" << endl;
    cerr << "\t" << ex.reason(); 
    return 1;
  }
   
  return 0;
}
//End of File