/* server/server.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "server/console.h" #include "server/server.h" #include "server/timer.h" #include "core/core.h" #include "game/game.h" namespace server { //--- private definition ------------------------------------------ /// server Application implementation class Server : public core::ApplicationInterface { public: /// initialize the server Application virtual void init(); /// run the server Application virtual void run(); /// shutdown the server Application virtual void shutdown(); /// quit the server Application virtual void quit(int status); }; Server app; game::Game *game; //--- public ------------------------------------------------------ /// the server main loop void main(int count, char **arguments) { std::cout << "The Osirion Project " << VERSION << std::endl; for (int i =0; i < count; i++) std::cout << arguments[i] << " "; std::cout << std::endl; app.init(); app.run(); app.shutdown(); } //--- private ----------------------------------------------------- void Server::init() { // FIXME core should be able to load game.so - // force initialization of the game object server::game = new game::Game(); con_print << "Initializing server..." << std::endl; core::ApplicationInterface::init(); console::init(); core::ApplicationInterface::connect(); } void Server::run() { const float server_framerate = 1.0f / 20.0f; server::Timer timer; timer.mark(); while(true) { float elapsed = timer.elapsed(); frame(elapsed); sys::sleep(server_framerate - elapsed); timer.mark(); } } void Server::shutdown() { con_debug << "Shutting down server..." << std::endl; console::shutdown(); core::ApplicationInterface::shutdown(); quit(0); } void Server::quit(int status) { // FIXME core should be able to unload game.so delete server::game; core::ApplicationInterface::quit(status); } } // namespace server