From 016d769e2b353d28b40f9c045f8e6d004d83bec1 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 8 Nov 2008 13:53:28 +0000 Subject: renaming server namespace to dedicated --- src/dedicated/server.cc | 123 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/dedicated/server.cc (limited to 'src/dedicated/server.cc') diff --git a/src/dedicated/server.cc b/src/dedicated/server.cc new file mode 100644 index 0000000..a4424a0 --- /dev/null +++ b/src/dedicated/server.cc @@ -0,0 +1,123 @@ +/* + 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 "core/timer.h" +#include "server/console.h" +#include "server/server.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 << "^BInitializing 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 Server::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 Server::shutdown() +{ + con_print << "^BShutting down 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 Server::quit(int status) +{ + core::Application::quit(status); +} + +} // namespace server + -- cgit v1.2.3