/* core/gameserver.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_GAMESERVER_H__ #define __INCLUDED_CORE_GAMESERVER_H__ #include "core/gameinterface.h" #include "core/module.h" #include "core/netserver.h" namespace core { /// the core game server /** the core game server runs the game module. Network access is enabled * for the dedicated server or the client with private server enabled. */ class GameServer : public GameInterface { public: GameServer(); ~GameServer(); /*----- inspectors ------------------------------------------------ */ /// returns true if the game server can run a time frime inline bool running() { return server_running; } /// returns true if the game server can not run a time frime inline bool error() { return !server_running; } /*----- mutators -------------------------------------------------- */ /// is called when a player connects to the game server void player_connect(Player *player); /// is called when a player disconnects from the game server void player_disconnect(Player *player); /// run a game server time frame void frame(float seconds); /// a player requests a list of who is connected void list_players(Player *player); /// a player sends a chat message to the public channel void say(Player *player, std::string const &args); /// a player requests the current time void showtime(Player *player); /// broadcast a message to all players void broadcast(std::string const & message, Player *ignore_player = 0); /// broadcast a sound to all players void broadcast_sound(std::string const & sound, Player *ignore_player = 0); /// send a message to a single player void send(Player *player, std::string message); /// send a sound to a single player void send_sound(Player *player, std::string sound); /// a player sends a command to the game server void exec(Player *player, std::string const &cmdline); /// find the first player who's id or name matches the search string Player *find_player(std::string const search); std::list players; /*----- static ---------------------------------------------------- */ /// return the current game server static inline GameServer *instance() { return server_instance; } protected: /// abort runing void abort(); private: bool server_running; Module *server_module; static GameServer *server_instance; NetServer *server_network; unsigned int server_maxplayerid; float server_frametime; float server_time; float server_previoustime; }; inline GameServer *server() { return GameServer::instance(); } } #endif // __INCLUDED_CORE_GAMESERVER_H__