1 #include "Client_Task.h"
2 #include "Server_Task.h"
4 #include "ace/High_Res_Timer.h"
5 #include "ace/Log_Msg.h"
6 #include "ace/OS_NS_string.h"
7 #include "ace/OS_NS_strings.h"
14 MyMain (int argc
, ACE_TCHAR
* argv
[]);
21 bool init_server (const ACE_TCHAR
* args
);
22 bool init_client (const ACE_TCHAR
* args
);
24 std::unique_ptr
<Server_Task
> server_task_
;
25 std::unique_ptr
<Client_Task
> client_task_
;
31 void MyMain::print_usage ()
34 bool MyMain::init_server (const ACE_TCHAR
* args
)
36 std::string
my_args (ACE_TEXT_ALWAYS_CHAR (args
));
37 // main thread and extra thread for backdoor operations
41 server_task_
= std::make_unique
<Server_Task
> (my_args
);
43 server_task_
.reset (new Server_Task (my_args
));
46 ACE_ASSERT (server_task_
);
48 server_task_
->activate (THR_NEW_LWP
| THR_JOINABLE
| THR_INHERIT_SCHED
, thread_pool
);
50 int duration
= 4; // wait 3 seconds for initialization
51 ACE_Time_Value current
= ACE_High_Res_Timer::gettimeofday_hr ();
52 ACE_Time_Value timeout
= current
+ ACE_Time_Value (duration
);
54 while (current
< timeout
)
56 if (server_task_
->ready ())
60 ACE_Time_Value sleep_time
;
62 ACE_OS::sleep (sleep_time
);
63 current
+= sleep_time
;
66 if (!server_task_
->ready ())
68 server_task_
->force_shutdown ();
69 server_task_
->wait ();
70 server_task_
.reset ();
77 bool MyMain::init_client (const ACE_TCHAR
* args
)
79 std::string
my_args (ACE_TEXT_ALWAYS_CHAR (args
));
83 client_task_
= std::make_unique
<Client_Task
> (my_args
);
85 client_task_
.reset (new Client_Task (my_args
));
88 ACE_ASSERT (client_task_
);
90 client_task_
->activate (THR_NEW_LWP
| THR_JOINABLE
| THR_INHERIT_SCHED
, thread_pool
);
95 MyMain::MyMain (int argc
, ACE_TCHAR
* argv
[])
100 for (int p
= 1; p
<= argc
; p
++)
102 if (ACE_OS::strcmp (argv
[p
], ACE_TEXT ("-?")) == 0)
108 if (ACE_OS::strcasecmp (argv
[p
], ACE_TEXT ("-s")) == 0)
110 const ACE_TCHAR
* s_args
= (((p
+ 1) <= argc
) ? argv
[p
+ 1] : 0);
111 s_init_
= this->init_server (s_args
);
114 else if (ACE_OS::strcasecmp (argv
[p
], ACE_TEXT ("-c")) == 0)
116 const ACE_TCHAR
* s_args
= (((p
+ 1) <= argc
) ? argv
[p
+ 1] : 0);
119 this->init_client (s_args
);
130 server_task_
->wait ();
135 client_task_
->wait ();
149 int ACE_TMAIN (int argc
, ACE_TCHAR
* argv
[])
151 MyMain
my_main (argc
, argv
);