src/proto2/NetworkServer.cc
author terom
Wed, 05 Nov 2008 22:29:31 +0000
changeset 14 22e3bfb6720d
parent 13 3fbb927c6a27
child 15 7710cce889b2
permissions -rw-r--r--
NetworkServer.cc finally works as intended
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     1
#include "NetworkServer.hh"
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     2
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     3
#include <iostream>
14
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
     4
#include <cassert>
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     5
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents: 5
diff changeset
     6
NetworkServer::NetworkServer (GameState *state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) {
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     7
	socket.bind(listen_ip);
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     8
	
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     9
	// add socket to listener
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    10
	listener.add_trigger(socket.get_read_trigger());
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    11
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    12
	// bind slot for recv
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    13
	slot_on_recv = socket.sig_read_triggered().connect(this, &NetworkServer::_onRecv);
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    14
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    15
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    16
NetworkServer *NetworkServer::newServer (void) {
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    17
	GameState *state = new GameState(/* XXX */);
13
3fbb927c6a27 fix broken includes
terom
parents: 8
diff changeset
    18
	CL_IPAddress listen_ip(NETWORK_PORT_STR);
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    19
	
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    20
	return new NetworkServer(state, listen_ip);
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    21
}		
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    22
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    23
void NetworkServer::run (void) {
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    24
	bool isRunning = true;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    25
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    26
	while (isRunning) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    27
		/* XXX: all I need to do? */
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    28
		listener.wait();
14
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    29
		CL_System::keep_alive();
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    30
		listener.reset_all();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    31
	}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    32
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    33
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    34
void NetworkServer::_onRecv (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    35
	char buf[NETWORK_PACKET_MAX];
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    36
	CL_IPAddress src;
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    37
	int ret;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    38
14
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    39
	std::cout << "NetworkServer::_onRecv: recv" << std::endl;
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    40
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    41
	ret = socket.recv((void*) buf, NETWORK_PACKET_MAX, src);
14
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    42
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    43
	assert(ret > 0);
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    44
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    45
	std::cout << src.get_address() << ":" << src.get_port() << " <- " << std::string(buf, ret) << std::endl;
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    46
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    47
		
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    48
NetworkServerClient::NetworkServerClient (NetworkServer &server) : server(server) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    49
	
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    50
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    51
		
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    52
void runNetworkServer (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    53
	NetworkServer *server = NULL;
14
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    54
	
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    55
	try {
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    56
		server = NetworkServer::newServer();
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    57
		server->run();
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    58
	} catch (CL_Error &e) {
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    59
		std::cerr << "runNetworkServer: CL_Error: " << e.message << std::endl;
22e3bfb6720d NetworkServer.cc finally works as intended
terom
parents: 13
diff changeset
    60
	}
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    61
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    62
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    63
int main (int argc, char **argv) {
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    64
	// setup ClanLib components
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    65
	CL_SetupCore setup_core;
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    66
	CL_SetupNetwork setup_network;
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    67
	
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    68
	// create the gamestate and run the server
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    69
	runNetworkServer();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    70
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    71
	return 0;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    72
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    73