1 #include <echo_callback.hh>
2
3 #ifdef HAVE_STD
4 # include <iostream>
5 using namespace std;
6 #else
7 # include <iostream.h>
8 #endif
9 #include <stdlib.h>
10
11
12 // Implementation of cb::CallBack.
13
14 class cb_i : public virtual POA_cb::CallBack
15 {
16 public:
cb_i()17 inline cb_i() {}
~cb_i()18 virtual ~cb_i() {}
19
call_back(const char * mesg)20 virtual void call_back(const char* mesg) {
21 cout << "cb_client: call_back(\"" << mesg << "\")" << endl;
22 }
23 };
24
25 //////////////////////////////////////////////////////////////////////
26
do_single(cb::Server_ptr server,cb::CallBack_ptr cb)27 static void do_single(cb::Server_ptr server, cb::CallBack_ptr cb)
28 {
29 if (CORBA::is_nil(server)) {
30 cerr << "cb_client: The server reference is nil!" << endl;
31 return;
32 }
33
34 cout << "cb_client: server->one_time(call_back, \"Hello!\")" << endl;
35 server->one_time(cb, "Hello!");
36 cout << "cb_client: Returned." << endl;
37 }
38
39
do_register(cb::Server_ptr server,cb::CallBack_ptr cb,int period,int time_to_shutdown)40 static void do_register(cb::Server_ptr server, cb::CallBack_ptr cb,
41 int period, int time_to_shutdown)
42 {
43 if (CORBA::is_nil(server)) {
44 cerr << "cb_client: The server reference is nil!" << endl;
45 return;
46 }
47
48 cout << "cb_client: server->register(call_back, \"Hello!\", "
49 << period << ")" << endl;
50 server->_cxx_register(cb, "Hello!", period);
51 cout << "cb_client: Returned." << endl;
52
53 omni_thread::sleep(time_to_shutdown);
54 cout << "cb_client: Finished." << endl;
55 }
56
57 //////////////////////////////////////////////////////////////////////
58
main(int argc,char ** argv)59 int main(int argc, char** argv)
60 {
61 try {
62 CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
63
64 if (argc != 2 && argc != 4) {
65 cerr << "usage: cb_client <object reference> [<call-back period>"
66 " <time to shutdown>]" << endl;
67 return 1;
68 }
69
70 {
71 // Get the reference the server.
72 CORBA::Object_var obj = orb->string_to_object(argv[1]);
73 cb::Server_var server = cb::Server::_narrow(obj);
74
75 // Initialise the POA.
76 obj = orb->resolve_initial_references("RootPOA");
77 PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
78 PortableServer::POAManager_var pman = poa->the_POAManager();
79 pman->activate();
80
81 // Register a CallBack object in this process.
82 cb_i* mycallback = new cb_i();
83 cb::CallBack_var callback = mycallback->_this(); // *implicit activation*
84 mycallback->_remove_ref();
85
86 if (argc == 2)
87 do_single(server, callback);
88 else
89 do_register(server, callback, atoi(argv[2]),
90 atoi(argv[3]));
91
92 }
93 // Clean-up. This also destroys the call-back object.
94 orb->destroy();
95 }
96 catch (CORBA::TRANSIENT&) {
97 cerr << "Caught system exception TRANSIENT -- unable to contact the "
98 << "server." << endl;
99 }
100 catch (CORBA::SystemException& ex) {
101 cerr << "Caught a CORBA::" << ex._name() << endl;
102 }
103 catch (CORBA::Exception& ex) {
104 cerr << "Caught CORBA::Exception: " << ex._name() << endl;
105 }
106 return 0;
107 }
108