/* $Id: clientconnection.hpp,v 1.5.4.1 2006/03/09 14:59:42 chfreund Exp $ */ #ifndef _CLIENTCONNECTION_HPP_ #define _CLIENTCONNECTION_HPP_ #include #include "constants.hpp" #include "tcpconnection.hpp" struct Message; struct EchoMessage; struct EventMessage; class World; //! Base class for connections to clients that are kept on server side class ClientConnection { protected: //! A unique identifier for the client Uint8 m_id; //! Flag that indicates the status of the client bool m_upToDate; //! The lag (in frames) of the connected client from server side Uint16 m_lag; //! The number of local players on client side Uint8 m_numberConnectedPlayers; //! Array that maps each player in this client to its global ID in the world Uint8 m_globalPlayerNumber[MAX_NUMBER_OF_PLAYERS]; //! Flag for using compression on outgoing messages bool m_compress; //! Progress listener TCPProgressListener* m_listener; public: //! Constructor ClientConnection() : m_upToDate( false ), m_numberConnectedPlayers( 0 ), m_compress( false ), m_listener( 0 ) { } //! Destructor virtual ~ClientConnection() { } //! \return the unique id of the client Uint8 getId() const { return m_id; } void setCompression( bool value ) { m_compress = value; } void setProgressListener( TCPProgressListener* listener ) { m_listener = listener; } //! \name Changing and querying the connection state //@{ //! Initiate the connection protocol //! \param clientID The client id that is assigned to this connection virtual void openConnection( Uint8 clientID ) = 0; //! Terminate the connection virtual void closeConnection() = 0; //! \return The status (connected, not connected) of the connection virtual bool isConnected() = 0; //! \return The lag Uint16 getLag() const { return m_lag; } //@} //! \name Sending and receiving messages //@{ //! \return The next EventMessage that has been received from the client virtual EventMessage* getEventMessage() = 0; //! \return The next non-EventMessage that has been received from the client virtual Message* getMessage() = 0; //! Send an echo message to the client //! \param echoMessage The echo message to be sent virtual void sendEchoMessage( Message* echoMessage ) = 0; //! Send a message to the client //! \param message The message to be sent //! \param comm The server communicator to be informed about progress virtual void sendMessage( Message* message ) = 0; //@} //! \name Adding and removing of players //@{ //! Add a player to this connection void addPlayer() { m_numberConnectedPlayers++; } //! Remove a player from this connection void removePlayer() { m_numberConnectedPlayers--; } //! \return The number of local players of this client Uint8 getNumberConnectedPlayers() const { return m_numberConnectedPlayers; } //! Set the global player id for a player from this client //! \param connectionPlayerNumber The local player number on this client //! \param globalPlayerNumber The global player ID for the player void setGlobalPlayerNumber( Uint8 connectionPlayerNumber, Uint8 globalPlayerNumber ) { m_globalPlayerNumber[connectionPlayerNumber] = globalPlayerNumber; } //! \return The global player ID for a local player on the client Uint8 getGlobalPlayerNumber( Uint8 connectionPlayerNumber ) const { return m_globalPlayerNumber[connectionPlayerNumber]; } //@} }; #endif // _CLIENTCONNECTION_HPP_