/* dedicated/dedicated.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/cvar.h" #include "core/stats.h" #include "core/timer.h" #include "dedicated/console.h" #include "dedicated/dedicated.h" namespace dedicated { void run(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; Dedicated app; app.init(count, arguments); app.run(); app.shutdown(); } /* ---- class Dedicated -------------------------------------------- */ void Dedicated::init(int count, char **arguments) { con_print << "^BInitializing dedicated server..." << std::endl; 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 Dedicated::run() { float server_framerate = 1.0f / 25.0f; if (core::Cvar::sv_framerate->value()) server_framerate = 1.0f / core::Cvar::sv_framerate->value(); core::Timer timer; timer.mark(); while (connected()) { frame(timer.timestamp()); #ifdef HAVE_CURSES console()->frame(); #endif } } void Dedicated::shutdown() { con_print << "^BShutting down dedicated server..." << std::endl; float ratio = 0; if (core::Stats::network_uncompressed_bytes_sent > 0) ratio = 100.0f - floorf((float)core::Stats::network_bytes_sent / (float) core::Stats::network_uncompressed_bytes_sent * 100.0f); int minutes = (int) floorf(time() / 60.0f); int seconds = (int) floorf(time() - (float) minutes * 60.0f); con_debug << "Statistics:" << std::endl; con_debug << " uptime " << std::setfill(' ') << std::setw(3) << minutes << ":" << std::setfill('0') << std::setw(2) << seconds << std::endl; con_debug << " bytes sent " << std::setfill(' ') << 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; con_debug << " compression " << std::setw(6) << ratio << " %" << std::endl; core::Application::shutdown(); Console::shutdown(); quit(0); } void Dedicated::notify_message(const core::Message::Channel channel, const std::string &message) { con_print << message << std::endl; } void Dedicated::quit(int status) { core::Application::quit(status); } } // namespace server