src/proto2/NetworkServer.cc
changeset 8 2de58a6d0395
parent 6 faa4e777cc6e
child 13 3fbb927c6a27
equal deleted inserted replaced
7:61ac44ae0fe6 8:2de58a6d0395
     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