Merge pull request #1815 from sonndinh/get_signal_info
[ACE_TAO.git] / TAO / tests / DII_AMI_Forward / client.cpp
blob7aa615369e8b65184389eac1805f4f48c6d4ecce
1 // -*- C++ -*-
4 #include "tao/DynamicInterface/Request.h" /* This must come first for
5 G++ 3.4 or better */
6 #include "tao/debug.h"
7 #include "ace/Get_Opt.h"
8 #include "ace/Task.h"
9 #include "ace/Log_Msg.h"
10 #include "DII_ReplyHandler.h"
11 #include "tao/AnyTypeCode/Any.h"
12 #include "tao/PortableServer/POAC.h"
13 #include "tao/PortableServer/POAManagerC.h"
15 const ACE_TCHAR *ior = ACE_TEXT("file://server.ior");
17 int do_shutdown = 0;
19 int
20 parse_args (int argc, ACE_TCHAR *argv[])
22 ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("xk:"));
23 int c;
25 while ((c = get_opts ()) != -1)
26 switch (c)
28 case 'x':
29 do_shutdown = 1;
30 break;
32 case 'k':
33 ior = get_opts.optarg;
34 break;
36 case '?':
37 default:
38 ACE_ERROR_RETURN ((LM_ERROR,
39 "usage: %s "
40 "-x "
41 "-k <ior> "
42 "\n",
43 argv [0]),
44 -1);
47 // Indicates successful parsing of the command line
48 return 0;
51 void
52 do_primary_test (CORBA::Object_var &server,
53 Messaging::ReplyHandler_var &callback)
55 try
58 CORBA::Request_var req = server->_request("do_forward");
60 if (CORBA::is_nil (server.in ()))
62 ACE_ERROR ((LM_ERROR,
63 "Object reference <%s> is nil.\n",
64 ior));
65 return;
68 ACE_DEBUG((LM_DEBUG,"Client sending test string\n"));
69 CORBA::String_var test_string = CORBA::string_dup ("123 look at me");
70 req->add_in_arg ("text") <<=
71 CORBA::Any::from_string(test_string.in(),30);
72 req->sendc(callback.in());
74 catch (const CORBA::Exception &ex)
76 ACE_ERROR ((LM_ERROR,
77 "Client caught exception: %C\n",ex._name()));
81 int do_shutdown_test (CORBA::Object_var &server)
83 ACE_DEBUG ((LM_DEBUG,
84 "[client] invoking shutdown on the server \n"));
85 try
87 CORBA::Request_var req = server->_request("shutdown");
88 req->invoke();
90 catch (const CORBA::Exception& ex)
92 ex._tao_print_exception ("Client: exception caught during shutdown - ");
93 return 1;
95 return 0;
99 int
100 ACE_TMAIN(int argc, ACE_TCHAR *argv[])
102 int result = 0;
106 CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
108 if (parse_args (argc, argv) != 0)
109 return 1;
111 ACE_DEBUG ((LM_DEBUG,"Client using ior source %s\n", ior));
112 CORBA::Object_var server = orb->string_to_object (ior);
114 CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA");
115 PortableServer::POA_var root =
116 PortableServer::POA::_narrow (obj.in());
118 PortableServer::POAManager_var pm = root->the_POAManager();
119 pm->activate();
120 bool got_reply = false;
121 Messaging::ReplyHandler_var callback = new DII_ReplyHandler(got_reply);
123 do_primary_test (server,callback);
125 for (int i = 0; i < 100 && !got_reply; i++)
127 ACE_Time_Value t(0,10000);
128 orb->perform_work(t);
131 if (do_shutdown)
132 result = do_shutdown_test (server);
134 ACE_DEBUG ((LM_DEBUG,"Shutting down and destrying ORB.\n"));
135 orb->destroy();
136 ACE_DEBUG ((LM_DEBUG,"ORB destroyed\n"));
138 catch (const ::CORBA::Exception &ex)
140 ex._tao_print_exception("ERROR : unexpected CORBA exception caugth :");
141 ++result;
143 return result;