diff --git a/include/ZE_Defines.h b/include/ZE_Defines.h index 8a47197..0f73746 100644 --- a/include/ZE_Defines.h +++ b/include/ZE_Defines.h @@ -13,7 +13,7 @@ \brief Define file for ZEngine where all #define statements to control compilation options are placed. Definition file, holds #define statements describing optional features of ZEngine. -
$Id: ZE_Defines.h,v 1.21 2003/08/08 04:05:22 cozman Exp $
+
$Id: ZE_Defines.h,v 1.22 2003/08/08 04:24:42 cozman Exp $
\author James Turk **/ @@ -36,13 +36,9 @@ #define USE_SDL_IMAGE //! Define to include sound support. #define USE_SDL_MIXER -//! Define to include net support. -//#define USE_SDL_NET //! Define to use the Physfs file system. //#define USE_PHYSFS //! Define to use depreciated code that has not been entirely removed. //#define DEPRECIATED -#endif - #endif //__ze_defines_h__ diff --git a/include/ZE_ZClient.h b/include/ZE_ZClient.h deleted file mode 100755 index b9e6287..0000000 --- a/include/ZE_ZClient.h +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - This file is Part of the ZEngine Library for 2D game development. - Copyright (C) 2002, 2003 James Turk - - Licensed under a BSD-style license. - - The maintainer of this library is James Turk (james@conceptofzero.net) - and the home of this Library is http://www.zengine.sourceforge.net -*******************************************************************************/ - -/*! - \file ZE_ZClient.h - \brief Definition file for ZClient. - - Definition file for ZClient, the TCP Client class for ZEngine. -
$Id: ZE_ZClient.h,v 1.6 2003/05/13 01:30:51 cozman Exp $
- \author James Turk -**/ - -#ifndef __ze_zclient_h__ -#define __ze_zclient_h__ - -#include "ZE_ZEngine.h" - -#ifdef USE_SDL_NET - -namespace ZE -{ - -/*! - \brief ZEngine class for a simplified TCP client. - - ZClient net client class, used to create a simple TCP game client for use with ZServer. - \since 0.8.3 -**/ -class ZClient -{ - protected: - //! Pointer to ZEngine Object. - ZEngine *rEngine; - //! SDL_net socket for connection. - TCPsocket rSocket; - //! Socket set for connection. - SDLNet_SocketSet rSocketSet; - //! Verbose setting for connection logs. - bool rVerbose; - //! Wait timeout setting for recieves on connection. [Defaults to 0.] - int rWaitTime; - - public: - /*! - \brief Default Constructor. - - Default Constructor, does basic initialization. If verbose is true connection data will be added to log file. - \param verbose Sets verbose setting of client. [Defaults to false.] - **/ - ZClient(bool verbose=false); - - /*! - \brief Destructor, disconnects and frees memory. - - Destructor calls ZClient::Disconnect(). - **/ - virtual ~ZClient(); - - /*! - \brief Connects to a server on a given port. - - Connects to a server (given in dotted ip form) on a given port. - \param server Dotted IP address to connect to. - \param port Port number to connect to. - \return true if connected, false otherwise. - **/ - bool Connect(char *server, Uint16 port); - - /*! - \brief Disconnect client. - - Disconnect from server if connected. - **/ - void Disconnect(); - - /*! - \brief Sets wait time for recieves. - - Sets wait time in milliseconds , time which ZClient::Recieve will wait before returning if there is no data. - Before this is called for the first time WaitTime is 0. - \param wait Wait time. - */ - void SetWaitTime(int wait); - - /*! - \brief Send data too connected server. - - Sends data to server if available. - \param data Pointer to data buffer to send. - \param size Size of data buffer. (Can't be larger than MAX_MSG_LEN as defined in ZE_Defines.h) - \return True if data could be sent, false upon error. - **/ - bool Send(ZByte *data, int size); - - /*! - \brief Recieve data if available. - - Recieves data from server if available, waiting for timeout period if no data is pending. - \param data Pointer to buffer to store data in. (Must be large enough, needs not be more than MAX_MSG_LEN as defined in ZE_Defines.h) - \return Size of recieved data stored to buffer. ($Id: ZE_ZServer.h,v 1.7 2003/05/13 01:30:51 cozman Exp $
- \author James Turk -**/ - -#ifndef __ze_zserver_h__ -#define __ze_zserver_h__ - -#include "ZE_ZEngine.h" - -#ifdef USE_SDL_NET - -namespace ZE -{ - -/*! - \brief ZEngine class for simplified TCP server. - - ZServer server class, used to create a simple TCP game server for use with ZClient. A very simple turnaround server, all the server does - is accept connections and relay all recieved data to all other clients. - \since 0.8.3 -**/ -class ZServer -{ - private: - //! Pointer to ZEngine Object. - ZEngine *rEngine; - //! SDL_net socket for connection. - TCPsocket rSocket; - //! Socket set for client connections. - SDLNet_SocketSet rSocketSet; - //! SDL_net TCPSockets for client connections. - TCPsocket *rClientSockets; - //! Maximum number of clients. - int rMaxClients; - //! Verbose setting for connection logs. - bool rVerbose; - //! Wait timeout setting for recieves on connection. [Defaults to 0.] - int rWaitTime; - - /*! - \brief Closes a socket. - - Close a socket given by it's number. - \param num Socket number to close. - **/ - void CloseSocket(int num); - - public: - /*! - \brief Default Constructor. - - Default Constructor, does basic initialization. If verbose is true connection data will be added to log file. - \param verbose Sets verbose setting of client. [Defaults to false.] - **/ - ZServer(bool verbose=false); - - /*! - \brief Destructor, disconnects server and frees memory. - - Destructor calls ZServer::Stop(). - **/ - virtual ~ZServer(); - - /*! - \brief Starts server. - - Starts server with a number of maximum clients and on a specified port. - \param maxClients Maximum number of clients possible to connect to server. - \param port Port to listen on for connections. - \return True if server started, false otherwise. - **/ - bool Start(int maxClients, Uint16 port); - - /*! - \brief Stops server. - - Closes port and disconnects all clients. - **/ - void Stop(); - - /*! - \brief Sets wait time for recieves. - - Sets wait time in milliseconds , time which ZServer::CheckSockets will wait before returning if there is no activity. - Before this is called for the first time the wait time is 0. - \param wait Wait time. - */ - void SetWaitTime(int wait); - - /*! - \brief Check sockets for connections or data. - - Check sockets for connections or data, accepting new connections or relaying data from existing connections. Waits the specified wait - period. This should be called very often to keep events flowing. - **/ - void CheckSockets(); - - /*! - \brief Gets number of clients. - - Finds number of connected clients. - \return Number of clients. - **/ - int Clients(); - - /*! - \brief Gets current wait time. - - Gets amount of time in milliseconds that is specified to wait for data on CheckSockets. - \return Wait time. - **/ - int WaitTime(); -}; - -} //namespace ZE - -#endif //USE_SDL_NET - -#endif //__ze_zserver_h__ diff --git a/src/ZE_ZClient.cpp b/src/ZE_ZClient.cpp deleted file mode 100755 index 868dd49..0000000 --- a/src/ZE_ZClient.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************* - This file is Part of the ZEngine Library for 2D game development. - Copyright (C) 2002, 2003 James Turk - - Licensed under a BSD-style license. - - The maintainer of this library is James Turk (james@conceptofzero.net) - and the home of this Library is http://www.zengine.sourceforge.net -*******************************************************************************/ - -/** - \file ZE_ZClient.cpp - \brief Source file for ZClient. - - Implementation file for ZClient, the TCP Client class for ZEngine. -
$Id: ZE_ZClient.cpp,v 1.11 2003/06/16 21:17:22 cozman Exp $
- \author James Turk -**/ - -#include "ZE_ZClient.h" - -#ifdef USE_SDL_NET - -namespace ZE -{ - -std::string num2dotted4(unsigned int num) -{ - int ip[4]; - int index=0; - int d=16777216; //2^24 - int m; - - //the dotted IP a.b.c.d = a256^3+b256^2+c256+d, this is the numeric ip algorithm in reverse - while(d > 0) - { - m = num/d; - num %= d; - ip[index] = m; - ++index; - d /= 256; - } - - return FormatStr("%d.%d.%d.%d",ip[3],ip[2],ip[1],ip[0]); -} - -ZClient::ZClient(bool verbose) : - rEngine(ZEngine::GetInstance()), - rSocket(NULL), - rSocketSet(NULL), - rVerbose(verbose), - rWaitTime(0) -{ -} - -ZClient::~ZClient() -{ - Disconnect(); -} - -bool ZClient::Connect(char *server, Uint16 port) -{ - IPaddress ip; - - //see if the IP is reachable - if(SDLNet_ResolveHost(&ip,server,port) < 0) - rEngine->ReportError(ZERR_NET_CLIENT,FormatStr("Failed to resolve host: %s:%d",server,port)); - else if(rVerbose) - rEngine->WriteLog(FormatStr("ZClient: resolved host: %s:%d",server,port)); - - rEngine->WriteLog(FormatStr("IP: %s",num2dotted4(ip.host).c_str())); - - rSocket = SDLNet_TCP_Open(&ip); //try to open rSocket - - if(!rSocket) - { - rEngine->ReportError(ZERR_NET_CLIENT,"Failed to open TCP socket."); - Disconnect(); - return false; - } - - rSocketSet = SDLNet_AllocSocketSet(1); //get a set for the single socket - if(!rSocketSet || SDLNet_TCP_AddSocket(rSocketSet,rSocket) == -1) - { - rEngine->ReportError(ZERR_NET_CLIENT,"Failed to create socket set."); - Disconnect(); - return false; - } - - return true; -} - -void ZClient::Disconnect() -{ - if(rSocket) - { - SDLNet_TCP_Close(rSocket); - rSocket = NULL; - } - if(rSocketSet) - { - SDLNet_FreeSocketSet(rSocketSet); - rSocketSet = NULL; - } -} - -void ZClient::SetWaitTime(int wait) -{ - rWaitTime = wait; -} - -bool ZClient::Send(ZByte *data, int size) -{ - int sent = 0; - - if(rSocket) - { - sent = SDLNet_TCP_Send(rSocket,data,size); - - //send < size means that entire packet didn't send.. which is a problem - if(sent < size) - { - rEngine->ReportError(ZERR_NET_CLIENT,FormatStr("Failed to send data, closing socket: %s", SDLNet_GetError())); - Disconnect(); - return false; - } - else if(rVerbose) - rEngine->WriteLog(FormatStr("ZClient: Sent %d bytes to server.",sent)); - - return true; - } - else - { - rEngine->ReportError(ZERR_NOSOCKET,"Send"); - return false; - } -} - -int ZClient::Receive(ZByte *data) -{ - int received = 0; - - if(rSocket) - { - //check if data is waiting on the socket - if(SDLNet_CheckSockets(rSocketSet, rWaitTime) > 0 && SDLNet_SocketReady(rSocket)) - { - //if recieved 0 (data was waiting) something happened - received = SDLNet_TCP_Recv(rSocket,data,MAX_MSG_LEN); - if(received <= 0) - { - Disconnect(); - rEngine->ReportError(ZERR_NET_CLIENT,FormatStr("TCP_Recv failed [%s]",SDLNet_GetError())); - } - else if(rVerbose) - rEngine->WriteLog(FormatStr("ZClient: received %d bytes.",received)); - } - } - else - rEngine->ReportError(ZERR_NOSOCKET,"Receive"); - - return received; -} - -bool ZClient::Connected() -{ - return rSocket?true:false; -} - -int ZClient::WaitTime() -{ - return rWaitTime; -} - -} //namespace ZE - -#endif //USE_SDL_NET diff --git a/src/ZE_ZServer.cpp b/src/ZE_ZServer.cpp deleted file mode 100755 index 43149b5..0000000 --- a/src/ZE_ZServer.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/******************************************************************************* - This file is Part of the ZEngine Library for 2D game development. - Copyright (C) 2002, 2003 James Turk - - Licensed under a BSD-style license. - - The maintainer of this library is James Turk (james@conceptofzero.net) - and the home of this Library is http://www.zengine.sourceforge.net -*******************************************************************************/ - -/** - \file ZE_ZServer.cpp - \brief Source file for ZServer. - - Implementation file for ZServer, the TCP Server class for ZEngine. -
$Id: ZE_ZServer.cpp,v 1.8 2003/07/05 01:11:03 cozman Exp $
- \author James Turk -**/ - -#include "ZE_ZServer.h" - -#ifdef USE_SDL_NET - -namespace ZE -{ - -void ZServer::CloseSocket(int num) -{ - SDLNet_TCP_Close(rClientSockets[num]); - rClientSockets[num] = NULL; //closed sockets should be NULL to mark them closed - if(rVerbose) - rEngine->WriteLog(FormatStr("Closing socket #%d",num)); -} - -ZServer::ZServer(bool verbose) : - rEngine(ZEngine::GetInstance()), - rSocket(NULL), rSocketSet(NULL), rClientSockets(NULL), - rMaxClients(0), rVerbose(verbose), rWaitTime(0) -{ -} - -ZServer::~ZServer() -{ - Stop(); -} - -bool ZServer::Start(int maxClients, Uint16 port) -{ - IPaddress ip; - - rMaxClients = maxClients; - rClientSockets = new TCPsocket[rMaxClients]; - - rSocketSet = SDLNet_AllocSocketSet(rMaxClients+1); //need one more (for server socket) - if(!rSocketSet) - { - rEngine->ReportError(ZERR_NET_SERVER,FormatStr("Failed to create sockets (%s).",SDLNet_GetError())); - Stop(); - return false; - } - else if(rVerbose) - rEngine->WriteLog(FormatStr("ZServer: Created server with %d available sockets.",rMaxClients)); - - for(int i=0; i < rMaxClients; ++i) - rClientSockets[i] = NULL; - - if(SDLNet_ResolveHost(&ip,NULL,port) < 0) //try to resolve the host - rEngine->ReportError(ZERR_NET_SERVER,FormatStr("Failed to create host server on port %d (%s).",port,SDLNet_GetError())); - else if(rVerbose) - rEngine->WriteLog(FormatStr("ZServer: Created host server on port %d.",port)); - - rSocket = SDLNet_TCP_Open(&ip); //try to open socket - if(!rSocket || SDLNet_TCP_AddSocket(rSocketSet,rSocket) == -1) - { - rEngine->ReportError(ZERR_NET_SERVER,"Failed to open server TCP socket."); - Stop(); - return false; - } - - return true; -} - -void ZServer::Stop() -{ - if(rSocket) - { - SDLNet_TCP_Close(rSocket); - rSocket = NULL; - } - if(rSocketSet) - { - SDLNet_FreeSocketSet(rSocketSet); - rSocketSet = NULL; - } - //each client must be let go, old memory leak - if(rClientSockets) - { - for(int i=0; i < rMaxClients; ++i) - { - if(rClientSockets[i]) - { - CloseSocket(i); - } - } - delete[] rClientSockets; - } - - rMaxClients = 0; -} - -void ZServer::SetWaitTime(int wait) -{ - rWaitTime = wait; -} - -void ZServer::CheckSockets() -{ - ZByte buf[MAX_MSG_LEN]; - int result,size,count; - - SDLNet_CheckSockets(rSocketSet, rWaitTime); - - if(SDLNet_SocketReady(rSocket)) //new client - { - for(count=0; count < rMaxClients; ++count) //find first open socket - { - if(!rClientSockets[count]) - break; - } - - if(rClientSockets[count]) //if it exists the set is full - { - rEngine->ReportError(ZERR_NET_SERVER,FormatStr("All %d ports full.",rMaxClients)); - } - else - { - rClientSockets[count] = SDLNet_TCP_Accept(rSocket); - SDLNet_TCP_AddSocket(rSocketSet, rClientSockets[count]); - if(rVerbose) - rEngine->WriteLog(FormatStr("ZServer: Adding socket #%d.",count+1)); - } - } - - //check all sockets for activity// - for(int i=0; i < rMaxClients; ++i) - { - if(SDLNet_SocketReady(rClientSockets[i])) //incoming message - { - result = SDLNet_TCP_Recv(rClientSockets[i], buf, MAX_MSG_LEN); - - if(result <= 0) //disconnect bad sockets - CloseSocket(i); - else if(rVerbose) - rEngine->WriteLog(FormatStr("ZServer: Received %d bytes on Port %d",result,i)); - - size = result; - if(rVerbose) - rEngine->WriteLog("ZServer: Mirroring data: "); - - for(int j=0; j < rMaxClients; ++j) - { - if(rClientSockets[j] && i != j) //send to open sockets that aren't the same - { - result = SDLNet_TCP_Send(rClientSockets[j],buf,size); - if(rVerbose) - rEngine->WriteLog(FormatStr(" +%d bytes on socket %d.",size,j)); - } - } - } - } -} - -int ZServer::Clients() -{ - int numClients=0; - - for(int i=0; i < rMaxClients; ++i) - { - if(rClientSockets[i]) - ++numClients; - } - - return numClients; -} - -int ZServer::WaitTime() -{ - return rWaitTime; -} - -} //namespace ZE - -#endif //USE_SDL_NET