src/proto2/NetworkServer.cc
changeset 21 32c6cc55256a
parent 15 7710cce889b2
child 22 b70d30e1b0fe
--- a/src/proto2/NetworkServer.cc	Fri Nov 07 21:40:32 2008 +0000
+++ b/src/proto2/NetworkServer.cc	Sat Nov 08 18:02:58 2008 +0000
@@ -4,82 +4,26 @@
 #include <iostream>
 #include <cassert>
 
-NetworkServer::NetworkServer (GameState *state, const CL_IPAddress &listen_ip) : NetworkBase(), state(state) {
-	socket.bind(listen_ip);
+NetworkServer::NetworkServer (GameState &state, const std::string &listen_port) : 
+	NetworkCore(state) {
 	
-	// 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);
+	// connect slots
+	slots.connect(netsession.sig_computer_connected(), this, &NetworkServer::on_connect);
+	slots.connect(netsession.sig_computer_disconnected(), this, &NetworkServer::on_disconnect);
+	
+	// and then we listen
+	netsession.start_listen(listen_port);
 }
 
-NetworkServer *NetworkServer::newServer (void) {
-	GameState *state = new GameState(/* XXX */);
-	CL_IPAddress listen_ip(NETWORK_PORT_STR);
-	
-	return new NetworkServer(state, listen_ip);
-}		
-
-void NetworkServer::run (void) {
-	bool isRunning = true;
-
-	while (isRunning) {
-		/* XXX: all I need to do? */
-		listener.wait();
-		CL_System::keep_alive();
-		listener.reset_all();
-	}
+void NetworkServer::on_connect (CL_NetComputer &computer) {
+	std::cout << "NetworkServer.on_connect: " << computer.get_address().get_address() << std::endl;
 }
 
-void NetworkServer::_onRecv (void) {
-    NetworkPacket pkt;
-
-    pkt.recvFromSocket(socket);
-
-	std::cout << pkt.src.get_address() << ":" << pkt.src.get_port() << " <- ";
-    
-    enum packet_type type = pkt.read_pkt_type();
-
-    switch (type) {
-        case PKT_HELLO: 
-        {
-            pkt_Hello hello(pkt);
-
-            std::cout << "\tPKT_HELLO: " << hello.player_id << std::endl;
-        } break;
-
-        default:
-        {
-            std::cout << "\t???:" << type << std::endl;
-
-        } break;
-    }    
+void NetworkServer::on_disconnect (CL_NetComputer &computer) {
+	std::cout << "NetworkServer.on_disconnect: " << computer.get_address().get_address() << std::endl;
 }
 		
 NetworkServerClient::NetworkServerClient (NetworkServer &server) : server(server) {
 	
 }
-		
-void runNetworkServer (void) {
-	NetworkServer *server = NULL;
-	
-	try {
-		server = NetworkServer::newServer();
-		server->run();
-	} catch (CL_Error &e) {
-		std::cerr << "runNetworkServer: CL_Error: " << e.message << std::endl;
-	}
-}
 
-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;
-}
-