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
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
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
     5
NetworkServer::NetworkServer (GameState &state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) {
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
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    13
	slot_on_recv = socket.sig_read_triggered.connect(this, &NetworkServer::_onRecv);
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    14
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    15
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    16
static NetworkServer *NetworkServer::newServer (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    17
	GameState *state = new GameState(/* XXX */);
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    18
	CL_IPAddress listen_ip(NETWORK_PORT_STR);
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
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    23
void run (void) {
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];
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    35
	CL_Socket src;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    36
	int ret;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    37
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    38
	ret = socket.recv(buf, NETWORK_PACKET_MAX, src);
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 NetworkServerClient::_onRecv (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    48
	
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
void runNetworkServer (void) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    52
	NetworkServer *server = NULL;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    53
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    54
	server = NetworkServer::newServer();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    55
	server->run();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    56
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    57
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    58
int main (int argc, char **argv) {
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    59
	runNetworkServer();
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    60
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    61
	return 0;
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    62
}
617813994ab1 move proto/p2 -> src/proto2
terom
parents:
diff changeset
    63