1 #include "NetworkServer.hh" |
1 #include "NetworkServer.hh" |
2 |
2 |
3 #include <iostream> |
3 #include <iostream> |
|
4 |
|
5 #include <ClanLib/network.h> |
4 |
6 |
5 NetworkServer::NetworkServer (GameState *state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) { |
7 NetworkServer::NetworkServer (GameState *state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) { |
6 socket.bind(listen_ip); |
8 socket.bind(listen_ip); |
7 socket.listen(NETWORK_SERVER_BACKLOG); |
9 socket.listen(NETWORK_SERVER_BACKLOG); |
8 |
10 |
9 // add socket to listener |
11 // add socket to listener |
10 listener.add_trigger(socket.get_read_trigger()); |
12 listener.add_trigger(socket.get_read_trigger()); |
11 |
13 |
12 // bind slot for recv |
14 // bind slot for recv |
13 slot_on_recv = socket.sig_read_triggered.connect(this, &NetworkServer::_onRecv); |
15 slot_on_recv = socket.sig_read_triggered().connect(this, &NetworkServer::_onRecv); |
14 } |
16 } |
15 |
17 |
16 static NetworkServer *NetworkServer::newServer (void) { |
18 NetworkServer *NetworkServer::newServer (void) { |
17 GameState *state = new GameState(/* XXX */); |
19 GameState *state = new GameState(/* XXX */); |
18 CL_IPAddress listen_ip(NETWORK_PORT_STR); |
20 CL_IPAddress listen_ip(NETWORK_PORT); |
19 |
21 |
20 return new NetworkServer(state, listen_ip); |
22 return new NetworkServer(state, listen_ip); |
21 } |
23 } |
22 |
24 |
23 void run (void) { |
25 void NetworkServer::run (void) { |
24 bool isRunning = true; |
26 bool isRunning = true; |
25 |
27 |
26 while (isRunning) { |
28 while (isRunning) { |
27 /* XXX: all I need to do? */ |
29 /* XXX: all I need to do? */ |
28 listener.wait(); |
30 listener.wait(); |
30 } |
32 } |
31 } |
33 } |
32 |
34 |
33 void NetworkServer::_onRecv (void) { |
35 void NetworkServer::_onRecv (void) { |
34 char buf[NETWORK_PACKET_MAX]; |
36 char buf[NETWORK_PACKET_MAX]; |
35 CL_Socket src; |
37 CL_IPAddress src; |
36 int ret; |
38 int ret; |
37 |
39 |
38 ret = socket.recv(buf, NETWORK_PACKET_MAX, src); |
40 ret = socket.recv((void*) buf, NETWORK_PACKET_MAX, src); |
39 |
41 |
40 std::cout << src.get_address() << ":" << src.get_port() << " <- " << std::string(buf, NETWORK_PACKET_MAX) << std::endl; |
42 std::cout << src.get_address() << ":" << src.get_port() << " <- " << std::string(buf, NETWORK_PACKET_MAX) << std::endl; |
41 } |
43 } |
42 |
44 |
43 NetworkServerClient::NetworkServerClient (NetworkServer &server) : server(server) { |
45 NetworkServerClient::NetworkServerClient (NetworkServer &server) : server(server) { |
44 |
46 |
45 } |
47 } |
46 |
48 |
47 void NetworkServerClient::_onRecv (void) { |
|
48 |
|
49 } |
|
50 |
|
51 void runNetworkServer (void) { |
49 void runNetworkServer (void) { |
52 NetworkServer *server = NULL; |
50 NetworkServer *server = NULL; |
53 |
51 |
54 server = NetworkServer::newServer(); |
52 server = NetworkServer::newServer(); |
55 server->run(); |
53 server->run(); |
56 } |
54 } |
57 |
55 |
58 int main (int argc, char **argv) { |
56 int main (int argc, char **argv) { |
|
57 // setup ClanLib components |
|
58 CL_SetupCore setup_core; |
|
59 CL_SetupNetwork setup_network; |
|
60 |
|
61 // create the gamestate and run the server |
59 runNetworkServer(); |
62 runNetworkServer(); |
60 |
63 |
61 return 0; |
64 return 0; |
62 } |
65 } |
63 |
66 |