Merge pull request #2301 from sonndinh/remove-dup-reactor-functions
[ACE_TAO.git] / TAO / tests / Bug_1269_Regression / server.cpp
blob66248ed65b730c293cc84b53d12245580dc510e3
1 #include "Echo_Caller.h"
2 #include "tao/Messaging/Messaging.h"
3 #include "tao/ORB_Core.h"
4 #include "ace/Get_Opt.h"
6 const ACE_TCHAR *ior_output_file = ACE_TEXT("test.ior");
8 int
9 parse_args (int argc, ACE_TCHAR *argv[]);
11 int
12 ACE_TMAIN(int argc, ACE_TCHAR *argv[])
14 try
16 CORBA::ORB_var orb =
17 CORBA::ORB_init (argc, argv);
19 CORBA::Object_var poa_object =
20 orb->resolve_initial_references("RootPOA");
22 PortableServer::POA_var root_poa =
23 PortableServer::POA::_narrow (poa_object.in ());
25 if (CORBA::is_nil (root_poa.in ()))
26 ACE_ERROR_RETURN ((LM_ERROR,
27 " (%P|%t) Panic: nil RootPOA\n"),
28 1);
30 PortableServer::POAManager_var poa_manager =
31 root_poa->the_POAManager ();
33 CORBA::Object_var object =
34 orb->resolve_initial_references ("PolicyCurrent");
36 if (parse_args (argc, argv) != 0)
37 return 1;
39 PortableServer::Servant_var<Echo_Caller> impl;
41 Echo_Caller * tmp;
42 // ACE_NEW_RETURN is the worst possible way to handle
43 // exceptions (think: what if the constructor allocates memory
44 // and fails?), but I'm not in the mood to fight for a more
45 // reasonable way to handle allocation errors in ACE.
46 ACE_NEW_RETURN (tmp,
47 Echo_Caller(orb.in()),
48 1);
49 impl = tmp;
52 PortableServer::ObjectId_var id =
53 root_poa->activate_object (impl.in ());
55 CORBA::Object_var object_act = root_poa->id_to_reference (id.in ());
57 Test::Echo_Caller_var server =
58 Test::Echo_Caller::_narrow (object_act.in ());
60 CORBA::String_var ior =
61 orb->object_to_string (server.in ());
63 // If the ior_output_file exists, output the ior to it
64 FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
65 if (output_file == 0)
66 ACE_ERROR_RETURN ((LM_ERROR,
67 "Cannot open output file for writing IOR: %s",
68 ior_output_file),
69 1);
70 ACE_OS::fprintf (output_file, "%s", ior.in ());
71 ACE_OS::fclose (output_file);
73 poa_manager->activate ();
75 orb->run();
77 ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n"));
79 root_poa->destroy (true, true);
81 orb->destroy ();
83 catch (const CORBA::Exception& ex)
85 ex._tao_print_exception ("Exception caught:");
86 return 1;
89 return 0;
92 int
93 parse_args (int argc, ACE_TCHAR *argv[])
95 ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("o:"));
96 int c;
98 while ((c = get_opts ()) != -1)
99 switch (c)
101 case 'o':
102 ior_output_file = get_opts.opt_arg ();
103 break;
105 case '?':
106 default:
107 ACE_ERROR_RETURN ((LM_ERROR,
108 "usage: %s "
109 "-o <iorfile> "
110 "\n",
111 argv [0]),
112 -1);
114 // Indicates successful parsing of the command line
115 return 0;