src/proto2/NetworkServer.cc
author terom
Wed, 05 Nov 2008 22:06:31 +0000
changeset 13 3fbb927c6a27
parent 8 2de58a6d0395
child 14 22e3bfb6720d
permissions -rw-r--r--
fix broken includes
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>
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     4
6
faa4e777cc6e fiddle with cmake, fix some compile errors
terom
parents: 5
diff changeset
     5
NetworkServer::NetworkServer (GameState *state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) {
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     6
	socket.bind(listen_ip);
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     7
	socket.listen(NETWORK_SERVER_BACKLOG);
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();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    29
		listener.reset_all();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    30
	}
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
void NetworkServer::_onRecv (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    34
	char buf[NETWORK_PACKET_MAX];
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    35
	CL_IPAddress src;
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    36
	int ret;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    37
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    38
	ret = socket.recv((void*) buf, NETWORK_PACKET_MAX, src);
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    39
	
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    40
	std::cout << src.get_address() << ":" << src.get_port() << " <- " << std::string(buf, NETWORK_PACKET_MAX) << std::endl;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    41
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    42
		
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    43
NetworkServerClient::NetworkServerClient (NetworkServer &server) : server(server) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    44
	
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    45
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    46
		
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    47
void runNetworkServer (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    48
	NetworkServer *server = NULL;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    49
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    50
	server = NetworkServer::newServer();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    51
	server->run();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    52
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    53
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    54
int main (int argc, char **argv) {
8
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    55
	// setup ClanLib components
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    56
	CL_SetupCore setup_core;
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    57
	CL_SetupNetwork setup_network;
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    58
	
2de58a6d0395 fix to mostly compile
terom
parents: 6
diff changeset
    59
	// create the gamestate and run the server
5
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    60
	runNetworkServer();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    61
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    62
	return 0;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    63
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    64