ACE+TAO-7_0_8
[ACE_TAO.git] / TAO / tests / Smart_Proxies / server.cpp
blob00b5e43f2c938a80d875f255016b34edb9bd2a37
2 //=============================================================================
3 /**
4 * @file server.cpp
6 * This is the server program that tests TAO's Smart Proxy extension.
8 * @author Kirthika Parameswaran <kirthika@cs.wustl.edu>
9 */
10 //=============================================================================
13 #include "testS.h"
14 #include "ace/Get_Opt.h"
15 #include "ace/OS_NS_string.h"
17 // The servant
19 class Test_i : public POA_Test
21 public:
22 Test_i (CORBA::ORB_ptr orb);
24 CORBA::Short method (CORBA::Short boo);
26 //FUZZ: disable check_for_lack_ACE_OS
27 ///FUZZ: enable check_for_lack_ACE_OS
28 void shutdown (void);
30 private:
31 CORBA::ORB_var orb_;
35 Test_i::Test_i (CORBA::ORB_ptr orb)
36 : orb_ (CORBA::ORB::_duplicate (orb))
40 CORBA::Short
41 Test_i :: method (CORBA::Short boo)
43 ACE_DEBUG ((LM_DEBUG,
44 ACE_TEXT ("Test_i::method () invoked\n")));
45 if (boo == 5)
46 throw Test::Oops ("Invalid boo\n");
48 return 0;
51 void
52 Test_i::shutdown (void)
54 this->orb_->shutdown (false);
57 static const ACE_TCHAR *ior_output_file = 0;
59 int
60 parse_args (int argc, ACE_TCHAR *argv[])
62 ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("o:"));
63 int c;
65 while ((c = get_opts ()) != -1)
66 switch (c)
68 case 'o':
69 ior_output_file = get_opts.opt_arg ();
70 break;
71 case '?':
72 default:
73 ACE_ERROR_RETURN ((LM_ERROR,
74 "usage: %s "
75 "-o <iorfile>"
76 "\n",
77 argv [0]),
78 -1);
80 // Indicates successful parsing of the command line
81 return 0;
84 int
85 ACE_TMAIN(int argc, ACE_TCHAR *argv[])
88 try
90 CORBA::ORB_var orb = CORBA::ORB_init (argc,
91 argv);
93 if (parse_args (argc, argv) != 0)
94 return 1;
96 Test_i servant (orb.in ());
97 // Obtain RootPOA.
98 CORBA::Object_var object =
99 orb->resolve_initial_references ("RootPOA");
101 PortableServer::POA_var root_poa =
102 PortableServer::POA::_narrow (object.in ());
105 // Get the POAManager of the RootPOA.
106 PortableServer::POAManager_var poa_manager =
107 root_poa->the_POAManager ();
109 PortableServer::ObjectId_var id =
110 root_poa->activate_object (&servant);
112 CORBA::Object_var object_act = root_poa->id_to_reference (id.in ());
114 Test_var Test_object =
115 Test::_narrow (object_act.in ());
117 CORBA::String_var ior =
118 orb->object_to_string (Test_object.in ());
120 // If the ior_output_file exists, output the ior to it
121 if (ior_output_file != 0)
123 FILE *output_file =
124 ACE_OS::fopen (ior_output_file, "w");
126 if (output_file == 0)
127 ACE_ERROR_RETURN ((LM_ERROR,
128 "Cannot open output file for writing IOR: %s",
129 ior_output_file),
132 ACE_OS::fprintf (output_file,
133 "%s",
134 ior.in ());
135 ACE_OS::fclose (output_file);
138 poa_manager->activate ();
140 orb->run ();
142 ACE_DEBUG ((LM_DEBUG, "event loop finished\n"));
144 root_poa->destroy (true, true);
146 orb->destroy ();
148 catch (const CORBA::Exception& ex)
150 ex._tao_print_exception ("Exception in setting up server");
151 return 1;
153 return 0;