src/proto2/NetworkServer.cc
author terom
Mon, 03 Nov 2008 22:59:50 +0000
changeset 5 617813994ab1
child 6 faa4e777cc6e
permissions -rw-r--r--
move proto/p2 -> src/proto2
#include "NetworkServer.hh"

#include <iostream>

NetworkServer::NetworkServer (GameState &state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) {
	socket.bind(listen_ip);
	socket.listen(NETWORK_SERVER_BACKLOG);
	
	// add socket to listener
	listener.add_trigger(socket.get_read_trigger());

	// bind slot for recv
	slot_on_recv = socket.sig_read_triggered.connect(this, &NetworkServer::_onRecv);
}

static NetworkServer *NetworkServer::newServer (void) {
	GameState *state = new GameState(/* XXX */);
	CL_IPAddress listen_ip(NETWORK_PORT_STR);
	
	return new NetworkServer(state, listen_ip);
}		

void run (void) {
	bool isRunning = true;

	while (isRunning) {
		/* XXX: all I need to do? */
		listener.wait();
		listener.reset_all();
	}
}

void NetworkServer::_onRecv (void) {
	char buf[NETWORK_PACKET_MAX];
	CL_Socket src;
	int ret;

	ret = socket.recv(buf, NETWORK_PACKET_MAX, src);
	
	std::cout << src.get_address() << ":" << src.get_port() << " <- " << std::string(buf, NETWORK_PACKET_MAX) << std::endl;
}
		
NetworkServerClient::NetworkServerClient (NetworkServer &server) : server(server) {
	
}
		
void NetworkServerClient::_onRecv (void) {
	
}

void runNetworkServer (void) {
	NetworkServer *server = NULL;

	server = NetworkServer::newServer();
	server->run();
}

int main (int argc, char **argv) {
	runNetworkServer();

	return 0;
}