1 #include "Server_Task.h"
2 #include "Client_Task.h"
3 #include "ace/Get_Opt.h"
4 #include "ace/Argv_Type_Converter.h"
5 #include "ace/SString.h"
6 #include "ace/Manual_Event.h"
10 const ACE_TCHAR
*output
= ACE_TEXT("test.ior");
11 const ACE_TCHAR
*input
= ACE_TEXT("file://test.ior");
12 // static int named_orbs = 0;
13 ACE_CString server_orb
;
14 ACE_CString client_orb
;
16 parse_args (int argc
, ACE_TCHAR
*argv
[])
18 ACE_Get_Opt
get_opts (argc
, argv
, ACE_TEXT("k:o:n"));
21 while ((c
= get_opts ()) != -1)
25 output
= get_opts
.opt_arg ();
28 input
= get_opts
.opt_arg ();
32 server_orb
.set ("server_orb");
33 client_orb
.set ("client_orb");
37 // This is a hack but that is okay!
40 // Indicates successful parsing of the command line
45 ACE_TMAIN(int argc
, ACE_TCHAR
*argv
[])
53 // Keep a copy of the ORB options args
55 for (int i
= 1; i
< argc
; ++i
)
57 if (orb_args
.add (argv
[i
]) == -1)
61 ACE_Argv_Type_Converter
satc (argc
, argv
);
62 // This eats all orb-specific options!
64 CORBA::ORB_init (satc
.get_argc (),
65 satc
.get_TCHAR_argv (),
69 Server_Task
server_task (output
,
72 ACE_Thread_Manager::instance ());
74 if (server_task
.activate (THR_NEW_LWP
| THR_JOINABLE
,
78 ACE_ERROR ((LM_ERROR
, "Error activating server task\n"));
81 // Wait for the server thread to do some processing
84 // Restore the orb-specific options.
85 argc
= orb_args
.argc ();
86 for (int i
= 1; i
< argc
; ++i
)
88 argv
[i
] = const_cast<ACE_TCHAR
*> (orb_args
[i
]);
90 ACE_Argv_Type_Converter
catc (argc
, argv
);
92 CORBA::ORB_init (catc
.get_argc(),
93 catc
.get_TCHAR_argv(),
96 Client_Task
client_task (input
,
98 ACE_Thread_Manager::instance ());
100 if (client_task
.activate (THR_NEW_LWP
| THR_JOINABLE
,
104 ACE_ERROR ((LM_ERROR
, "Error activating client task\n"));
107 // Wait for the client and server to finish
108 ACE_Thread_Manager::instance ()->wait ();
110 // Now that all threads have completed we can destroy the ORB
112 if (server_orb
!= client_orb
)
117 catch (const CORBA::Exception
&)
119 // Ignore exceptions..