33 #include "main.h" |
33 #include "main.h" |
34 #include "network/rconsession.h" |
34 #include "network/rconsession.h" |
35 #include "huffman/huffman.h" |
35 #include "huffman/huffman.h" |
36 #include "interface.h" |
36 #include "interface.h" |
37 |
37 |
|
38 static bool g_shouldExit = false; |
|
39 |
38 // ------------------------------------------------------------------------------------------------- |
40 // ------------------------------------------------------------------------------------------------- |
39 // |
41 // |
40 FUNCTION |
42 FUNCTION |
41 main (int argc, char* argv[]) -> int |
43 main (int argc, char* argv[]) -> int |
42 { |
44 { |
43 HUFFMAN_Construct(); |
45 HUFFMAN_Construct(); |
44 Interface::initialize(); |
46 Interface::initialize(); |
45 |
47 |
46 for (;;) |
48 try |
47 { |
49 { |
48 fd_set fdset; |
50 for (;;) |
49 int highest = 0; |
51 { |
50 timeval timeout; |
52 if (g_shouldExit) |
51 timeout.tv_sec = 0; |
53 break; |
52 timeout.tv_usec = 250000; // 0.25 seconds |
|
53 FD_ZERO (&fdset); |
|
54 FD_SET (0, &fdset); |
|
55 RCONSession* session = RCONSession::get_session(); |
|
56 |
54 |
57 if (session) |
55 fd_set fdset; |
58 { |
56 int highest = 0; |
59 int fd = session->socket()->file_descriptor(); |
57 timeval timeout; |
60 highest = max (highest, fd); |
58 timeout.tv_sec = 0; |
61 FD_SET (fd, &fdset); |
59 timeout.tv_usec = 250000; // 0.25 seconds |
|
60 FD_ZERO (&fdset); |
|
61 FD_SET (0, &fdset); |
|
62 RCONSession* session = RCONSession::get_session(); |
|
63 |
|
64 if (session) |
|
65 { |
|
66 int fd = session->socket()->file_descriptor(); |
|
67 highest = max (highest, fd); |
|
68 FD_SET (fd, &fdset); |
|
69 } |
|
70 |
|
71 select (highest + 1, &fdset, nullptr, nullptr, &timeout); |
|
72 |
|
73 if (FD_ISSET (0, &fdset)) |
|
74 // stdin is ready, what's incoming? |
|
75 Interface::handle_input(); |
|
76 |
|
77 if (session) |
|
78 session->tick(); |
|
79 |
|
80 Interface::render(); |
62 } |
81 } |
|
82 } |
|
83 catch (const Exitception&) {} |
63 |
84 |
64 select (highest + 1, &fdset, nullptr, nullptr, &timeout); |
85 if (RCONSession::get_session()) |
65 |
86 RCONSession::get_session()->disconnect(); |
66 if (FD_ISSET (0, &fdset)) |
|
67 // stdin is ready, what's incoming? |
|
68 Interface::handle_input(); |
|
69 |
|
70 if (session) |
|
71 session->tick(); |
|
72 |
|
73 Interface::render(); |
|
74 } |
|
75 |
87 |
76 return EXIT_SUCCESS; |
88 return EXIT_SUCCESS; |
77 } |
89 } |
|
90 |
|
91 // ------------------------------------------------------------------------------------------------- |
|
92 // |
|
93 FUNCTION |
|
94 request_exit() -> void |
|
95 { |
|
96 g_shouldExit = true; |
|
97 } |