diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-04-18 12:55:41 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-04-18 12:55:41 +0000 |
commit | 3370b59fe2c9544fddebb1281505ddec3d22c0e1 (patch) | |
tree | 1e5ffa36ccf1a45cb678781acce65231df0c656e /src/netsession.cpp | |
parent | 5478d27cb1affe4c7be40dab32058ada95258a1f (diff) | |
download | manaserv-3370b59fe2c9544fddebb1281505ddec3d22c0e1.tar.gz manaserv-3370b59fe2c9544fddebb1281505ddec3d22c0e1.tar.bz2 manaserv-3370b59fe2c9544fddebb1281505ddec3d22c0e1.tar.xz manaserv-3370b59fe2c9544fddebb1281505ddec3d22c0e1.zip |
Server now succesfully listens for connections, accepts them, receives some
data in a crude way and cleans up connection on client disconnect.
Diffstat (limited to 'src/netsession.cpp')
-rw-r--r-- | src/netsession.cpp | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/src/netsession.cpp b/src/netsession.cpp index a617c105..f4f77214 100644 --- a/src/netsession.cpp +++ b/src/netsession.cpp @@ -23,35 +23,16 @@ #include "netsession.h" -#define MAX_CLIENTS 1024 - +/** + * This function is the new thread created to listen to a server socket. It + * immediately passes control over to the connection handler instance that will + * deal with incoming connections and data. + */ int startListenThread(void *data) { ListenThreadData *ltd = (ListenThreadData*)data; - - // Allocate a socket set - SDLNet_SocketSet set = SDLNet_AllocSocketSet(MAX_CLIENTS); - if (!set) { - printf("SDLNet_AllocSocketSet: %s\n", SDLNet_GetError()); - exit(1); - } - - // Add the server socket to the socket set - if (SDLNet_TCP_AddSocket(set, ltd->socket) < 0) { - printf("SDLNet_AddSocket: %s\n", SDLNet_GetError()); - exit(1); - } - - // Keep checking for socket activity while running - while (ltd->running) - { - int numready = SDLNet_CheckSockets(set, 1000); - printf("numready: %d\n", numready); - } - - SDLNet_FreeSocketSet(set); - + ltd->handler->startListen(ltd); return 0; } @@ -73,10 +54,16 @@ void NetSession::startListen(ConnectionHandler *handler, Uint16 port) ListenThreadData *data = new ListenThreadData(); - data->address.host = INADDR_ANY; - data->address.port = port; data->handler = handler; data->running = true; + + // Fill in IPaddress for opening local server socket + if (SDLNet_ResolveHost(&data->address, NULL, port) == -1) { + printf("SDLNet_ResolveHost: %s\n", SDLNet_GetError()); + exit(6); + } + + // Attempt to open the local server socket data->socket = SDLNet_TCP_Open(&data->address); if (!data->socket) { @@ -84,6 +71,7 @@ void NetSession::startListen(ConnectionHandler *handler, Uint16 port) exit(3); } + // Start the listening thread data->thread = SDL_CreateThread(startListenThread, data); if (data->thread == NULL) { |