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