/* 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 #include #include "core/core.h" #include "core/stats.h" #include "server/console.h" #include "server/server.h" #include "server/timer.h" namespace server { //--- private definition ------------------------------------------ /// server Application implementation class Server : public core::Application { public: /// initialize the server Application virtual void init(int count, char **arguments); /// 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; //--- public ------------------------------------------------------ /// the server main loop void main(int count, char **arguments) { std::cout << core::name() << " " << core::version() << std::endl; for (int i =0; i < count; i++) std::cout << arguments[i] << " "; std::cout << std::endl; app.init(count, arguments); app.run(); app.shutdown(); } //--- private ----------------------------------------------------- void Server::init(int count, char **arguments) { con_print << "Initializing server..." << std::endl; core::Cvar::sv_private = core::Cvar::set("sv_dedicated", "1", core::Cvar::ReadOnly); core::Application::init(count, arguments); console::init(); // the command line is in the buffer, execute it core::CommandBuffer::exec(); std::string empty; core::Application::connect(empty); } void Server::run() { float server_framerate = 1.0f / 25.0f; if (core::Cvar::sv_framerate->value()) server_framerate = 1.0f / core::Cvar::sv_framerate->value(); server::Timer timer; float elapsed = 0; while(connected()) { timer.mark(); frame(elapsed); elapsed = timer.elapsed(); /* if (elapsed < server_framerate) { sys::sleep(server_framerate - elapsed); elapsed = server_framerate; } */ } } void Server::shutdown() { con_print << "Shutting down server..." << std::endl; con_debug << "Network statistics:" << std::endl; con_debug << " bytes sent " << std::setw(6) << core::Stats::network_bytes_sent / 1024 << " Kb" << std::endl; con_debug << " bytes received " << std::setw(6) << core::Stats::network_bytes_received / 1024 << " Kb" << std::endl; console::shutdown(); core::Application::shutdown(); quit(0); } void Server::quit(int status) { core::Application::quit(status); } } // namespace server