src/proto2/NetworkServer.cc
author terom
Wed, 05 Nov 2008 20:39:44 +0000
changeset 8 2de58a6d0395
parent 6 faa4e777cc6e
child 13 3fbb927c6a27
permissions -rw-r--r--
fix to mostly compile
#include "NetworkServer.hh"

#include <iostream>

#include <ClanLib/network.h>

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);
}

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

void NetworkServer::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_IPAddress src;
	int ret;

	ret = socket.recv((void*) 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 runNetworkServer (void) {
	NetworkServer *server = NULL;

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

int main (int argc, char **argv) {
	// setup ClanLib components
	CL_SetupCore setup_core;
	CL_SetupNetwork setup_network;
	
	// create the gamestate and run the server
	runNetworkServer();

	return 0;
}