diff options
Diffstat (limited to 'modules/CIAO/examples/DevGuideExamples/Messenger/Administrator_Client.cpp')
-rw-r--r-- | modules/CIAO/examples/DevGuideExamples/Messenger/Administrator_Client.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/modules/CIAO/examples/DevGuideExamples/Messenger/Administrator_Client.cpp b/modules/CIAO/examples/DevGuideExamples/Messenger/Administrator_Client.cpp new file mode 100644 index 00000000000..15378b35b78 --- /dev/null +++ b/modules/CIAO/examples/DevGuideExamples/Messenger/Administrator_Client.cpp @@ -0,0 +1,120 @@ +// $Id$ + +/** + * @file Administrator_Client.cpp + * + * Do NOT put this file in a project; it is included by + * Administrator_Client_IDL2.cpp and Administrator_Client_IDL3.cpp + * This file will not build on its own. + * + * @author Don Busch <busch_d@ociweb.com> + */ + +#include "ace/Get_Opt.h" +#include <iostream> + +const ACE_TCHAR* ior = ACE_TEXT ("file://Messenger.ior"); + +int +parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "k:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'k': + ior = get_opts.optarg; + break; + + case '?': + default: + std::cerr << "usage: " << argv[0] << " -k <ior>" << std::endl; + return -1; + break; + } + return 0; +} + +int +svc( Runnable_ptr runnable, Publication_ptr publication ) +{ + enum SelectionType { START=1, STOP, CHANGE_PERIOD, CHANGE_TEXT, EXIT }; + + bool done = false; + do { + std::cout << "\nWhat do you want to do to the Messenger(s)?" << std::endl; + std::cout << START << ". Start" << std::endl; + std::cout << STOP << ". Stop" << std::endl; + std::cout << CHANGE_PERIOD << ". Change Publication Period" << std::endl; + std::cout << CHANGE_TEXT << ". Change Publication Text" << std::endl; + std::cout << EXIT << ". Exit" << std::endl; + + char selection_text[10]; + std::cout << "Please enter a selection: "; + std::cin.getline( selection_text, sizeof(selection_text) ); + int selection = ACE_OS::atoi(selection_text); + + switch (selection) { + case START: { + runnable->start(); + break; + } + case STOP: { + runnable->stop(); + break; + } + case CHANGE_PERIOD: { + char period[10]; + std::cout << "Please enter a new period in seconds: "; + std::cin.getline( period, sizeof( period ) ); + publication->period( ACE_OS::atoi(period) ); + break; + } + case CHANGE_TEXT: { + char buffer[1024]; + std::cout << "Please enter new text: "; + std::cin.getline( buffer, sizeof(buffer) ); + publication->text( buffer ); + break; + } + case EXIT: { + done = true; + break; + } + default: + std::cout << "Please enter a valid option" << std::endl; + } + } while ( !done ); + + return 0; +} + +int +ACE_TMAIN (int argc, ACE_TCHAR *argv[]) +{ + if (parse_args (argc, argv) != 0) { + return 1; + } + + try { + CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); + + // get Messenger object + CORBA::Object_var obj = orb->string_to_object(ior); + Messenger_var messenger = Messenger::_narrow (obj.in()); + + Runnable_var runnable = messenger->provide_control(); + Publication_var publication = messenger->provide_content (); + + svc( runnable.in(), publication.in() ); + + return 0; + } + catch(const CORBA::Exception& ex) { + std::cerr << "Caught CORBA::Exception: " << std::endl << ex << std::endl; + } + + return 1; +} |