/* core/gameconnection.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CORE_GAMECONNECTION_H__ #define __INCLUDED_CORE_GAMECONNECTION_H__ #include "core/gameinterface.h" #include "core/netconnection.h" namespace core { /// a connection to a remote game class GameConnection : public GameInterface { public: GameConnection(std::string const &connectionstr); virtual ~GameConnection(); /*----- inspectors ------------------------------------------------ */ /// returns true if the game connection can run a time frime inline bool running() const { return connection_running; } /// returns true if the game connection can not run a time frime inline bool error() const { return !connection_running; } /// returns true if the game is running an interactive module virtual bool interactive() const; /// return the current game time in seconds virtual float time() const; /// return the current game time virtual unsigned long timestamp() const; /*----- mutators -------------------------------------------------- */ /// run a game connection time frame void frame(unsigned long timestamp); /// forward a command line to the remote server void forward(std::string const &cmdline); /// forward a remote console command void rcon(std::string const &cmdline); /// localplayer sends a chat message to the public channel void say(std::string const &args); /// localplayer sends a private message to another player void private_message(std::string const &args); /// returns an info record Info *info(const std::string &label); /*----- static ---------------------------------------------------- */ /// return the current game connection static inline GameConnection *instance() { return connection_instance; } protected: /// abort runing void abort(); private: bool connection_running; unsigned long connection_timestamp; // server game time unsigned long connection_netframe; // last network frame timestamp NetConnection *connection_network; static GameConnection *connection_instance; }; inline GameConnection *connection() { return GameConnection::instance(); } } #endif // __INCLUDED_CORE_GAMECONNECTION_H__