Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-01 19:34:47 +0000
committerStijn Buys <ingar@osirion.org>2008-02-01 19:34:47 +0000
commit6c8446cddb37df732fc9e5fc21f98e31968ce634 (patch)
tree25515ae78969e2f0ef216a5cbef8a650b217e8f8 /src
parentf794b9ee52293cefd6ac73fdf0d2a01c5388f057 (diff)
interface cleanup
Diffstat (limited to 'src')
-rw-r--r--src/client/Makefile.am4
-rw-r--r--src/client/application.cc84
-rw-r--r--src/client/application.h33
-rw-r--r--src/client/client.cc96
-rw-r--r--src/client/client.h49
-rw-r--r--src/client/console.h6
-rw-r--r--src/client/input.cc7
-rw-r--r--src/client/main.cc9
-rw-r--r--src/common/Makefile.am4
-rw-r--r--src/common/common.cc20
-rw-r--r--src/common/common.h13
-rw-r--r--src/common/console.cc36
-rw-r--r--src/common/consoleinterface.cc36
-rw-r--r--src/common/consoleinterface.h (renamed from src/common/console.h)29
-rw-r--r--src/core/Makefile.am4
-rw-r--r--src/core/applicationinterface.cc68
-rw-r--r--src/core/applicationinterface.h42
-rw-r--r--src/core/core.cc50
-rw-r--r--src/core/core.h14
-rw-r--r--src/core/gameinterface.cc37
-rw-r--r--src/core/gameinterface.h44
-rw-r--r--src/game/game.h2
-rw-r--r--src/server/Makefile.am4
-rw-r--r--src/server/application.cc50
-rw-r--r--src/server/application.h29
-rw-r--r--src/server/console.h6
-rw-r--r--src/server/main.cc8
-rw-r--r--src/server/server.cc48
-rw-r--r--src/server/server.h23
29 files changed, 540 insertions, 315 deletions
diff --git a/src/client/Makefile.am b/src/client/Makefile.am
index f8542e2..e191f5f 100644
--- a/src/client/Makefile.am
+++ b/src/client/Makefile.am
@@ -8,12 +8,12 @@ osirion_LDADD = $(top_builddir)/src/math/libmath.la \
$(top_builddir)/src/core/libcore.la \
$(top_builddir)/src/game/libgame.la \
$(top_builddir)/src/gl/libgl.la
-osirion_SOURCES = camera.cc client.cc console.cc hud.cc input.cc main.cc \
+osirion_SOURCES = application.cc camera.cc client.cc console.cc hud.cc input.cc main.cc \
shipdrawer.cc stardrawer.cc video.cc view.cc
INCLUDES = -I$(top_srcdir)/src
osirion_CFLAGS = $(LIBSDL_CFLAGS) $(GL_CFLAGS)
osirion_LDFLAGS = $(LIBSDL_LIBS) $(GL_LIBS)
-noinst_HEADERS = camera.h client.h console.h input.h shipdrawer.h stardrawer.h \
+noinst_HEADERS = application.h camera.h client.h console.h input.h shipdrawer.h stardrawer.h \
video.h view.h
diff --git a/src/client/application.cc b/src/client/application.cc
new file mode 100644
index 0000000..03dda2f
--- /dev/null
+++ b/src/client/application.cc
@@ -0,0 +1,84 @@
+/*
+ client/application.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
+*/
+
+// project headers
+#include "client/client.h"
+#include "client/application.h"
+#include "core/core.h"
+
+// SDL headers
+#include <SDL/SDL.h>
+
+// C++ headers
+#include <cmath>
+
+namespace client {
+
+void Application::quit(int status)
+{
+ SDL_Quit();
+ exit(status);
+}
+
+void Application::init()
+{
+ // initialize core
+ core::ApplicationInterface::init();
+
+ con_debug << "Initializing client..." << std::endl;
+
+ // Initialize the video subsystem
+ video.init();
+ if (!video.initialized) {
+ quit(1);
+ }
+
+ // initialize input
+ input.init();
+}
+
+void Application::run()
+{
+ Uint32 chrono = SDL_GetTicks();
+
+ while(true) {
+ Uint32 current = SDL_GetTicks();
+
+ // overflow protection ~49 days
+ if (current < chrono) {
+ chrono = current;
+ }
+
+ // update the game chronometers
+ float elapsed = (float) ( current - chrono) / 1000.0f;
+ chrono = current;
+
+ frame(elapsed);
+
+ // update the video chronometers and draw
+ video.draw(elapsed);
+
+ // process input
+ input.process();
+ }
+
+}
+
+void Application::shutdown()
+{
+ con_debug << "Shutting down client..." << std::endl;
+
+ input.shutdown();
+
+ video.shutdown();
+
+ core::ApplicationInterface::shutdown();
+
+ quit(0);
+
+}
+
+}
diff --git a/src/client/application.h b/src/client/application.h
new file mode 100644
index 0000000..571e5af
--- /dev/null
+++ b/src/client/application.h
@@ -0,0 +1,33 @@
+/*
+ client/application.h
+ This file is part of the Osirion project and is distributed under
+ the terms and conditions of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_CLIENT_APPLICATION_H__
+#define __INCLUDED_CLIENT_APPLICATION_H__
+
+#include "core/applicationinterface.h"
+
+namespace client {
+
+/// client Application implementation
+class Application : public core::ApplicationInterface {
+public:
+ /// initialize the client Application
+ virtual void init();
+
+ /// run the client Application
+ virtual void run();
+
+ /// shutdown the client Application
+ virtual void shutdown();
+
+protected:
+ /// quit the client Application
+ void quit(int result);
+};
+
+}
+#endif // __INCLUDED_CLIENT_APPLICATION_H__
+
diff --git a/src/client/client.cc b/src/client/client.cc
index 7a718a3..e78f73d 100644
--- a/src/client/client.cc
+++ b/src/client/client.cc
@@ -4,91 +4,25 @@
the terms and conditions of the GNU General Public License version 2
*/
-// project headers
-#include "client/client.h"
-#include "game/game.h"
-#include "core/core.h"
-#include "common/common.h"
-
-// SDL headers
-#include <SDL/SDL.h>
+#include "client/application.h"
+#include "client/camera.h"
+#include "client/console.h"
+#include "client/input.h"
+#include "client/video.h"
+#include "client/view.h"
-// C++ headers
-#include <cmath>
+#include "game/game.h"
namespace client {
// public instances
-Camera camera;
-View view;
-Video video;
-Input input;
-
-// private instance of the client console object
-Console console_instance;
-// private instance of the game object
-game::Game game_instance;
-
-void quit(int status)
-{
- SDL_Quit();
- exit(status);
-}
-
-void init()
-{
- // core initializes all the modules
- core::init();
-
- con_debug << "Initializing client..." << std::endl;
-
- // Initialize the video subsystem
- video.init();
- if (!video.initialized) {
- quit(1);
- }
-
- // initialize input
- input.init();
-}
-
-void run()
-{
- Uint32 chrono = SDL_GetTicks();
-
- while(true) {
- Uint32 current = SDL_GetTicks();
-
- // overflow protection ~49 days
- if (current < chrono) {
- chrono = current;
- }
-
- // update the game chronometers
- float elapsed = (float) ( current - chrono) / 1000.0f;
- chrono = current;
-
- core::frame(elapsed);
-
- // update the video chronometers and draw
- video.draw(elapsed);
-
- // process input
- input.process();
- }
-}
-
-void shutdown()
-{
- con_debug << "Shutting down client..." << std::endl;
-
- input.shutdown();
-
- video.shutdown();
-
- core::shutdown();
-
- quit(0);
-}
+Application application;
+Camera camera;
+View view;
+Video video;
+Input input;
+Console console;
+game::Game game;
} // namespace client
+
diff --git a/src/client/client.h b/src/client/client.h
index a25643c..af3e53b 100644
--- a/src/client/client.h
+++ b/src/client/client.h
@@ -7,32 +7,45 @@
#ifndef __INCLUDED_CLIENT_H__
#define __INCLUDED_CLIENT_H__
-#include "client/console.h"
+// project headers
+#include "client/application.h"
#include "client/camera.h"
-#include "client/view.h"
+#include "client/console.h"
#include "client/input.h"
#include "client/video.h"
+#include "client/view.h"
+
+#include "core/core.h"
+#include "game/game.h"
/// client-side functions to render and control the gameworld
/** The client namespace contains the necessary functions to
* accept input, send it to the game and renders the result
*/
namespace client {
- /// initialize the client
- extern void init();
- /// run the client
- extern void run();
- /// shutdown the client
- extern void shutdown();
-
- /// global Video object
- extern Video video;
- /// global Input object
- extern Input input;
- /// global View object
- extern View view;
- /// global Camera object
- extern Camera camera;
-}
+
+/// global Application instance;
+extern Application application;
+
+/// global Video instance
+extern Video video;
+
+/// global Input instance
+extern Input input;
+
+/// global View instance
+extern View view;
+
+/// global Camera instance
+extern Camera camera;
+
+/// global server Console instance
+extern Console console;
+
+/// global Game instance
+extern game::Game game;
+
+} // namespace client
#endif // __INCLUDED_CLIENT_H__
+
diff --git a/src/client/console.h b/src/client/console.h
index 21d5df9..8e8ab02 100644
--- a/src/client/console.h
+++ b/src/client/console.h
@@ -7,12 +7,12 @@
#ifndef __INCLUDED_CLIENT_CONSOLE_H__
#define __INCLUDED_CLIENT_CONSOLE_H__
-#include "common/console.h"
+#include "common/consoleinterface.h"
namespace client {
-/// Interface for a console object that writes messages on the screen
-class Console : public common::Console {
+/// client console implementation
+class Console : public common::ConsoleInterface {
public:
/// stream to send normal messages too
virtual std::ostream & messagestream();
diff --git a/src/client/input.cc b/src/client/input.cc
index b18339e..5f38d35 100644
--- a/src/client/input.cc
+++ b/src/client/input.cc
@@ -12,6 +12,8 @@ namespace client {
void Input::init()
{
+ con_debug << "Initializing input..." << std::endl;
+
//condebug << "SDL_DEFAULT_REPEAT_DELAY " << SDL_DEFAULT_REPEAT_DELAY << std::endl;
//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
SDL_EnableKeyRepeat(10, SDL_DEFAULT_REPEAT_INTERVAL);
@@ -19,6 +21,7 @@ void Input::init()
void Input::shutdown()
{
+ con_debug << "Shutting down input..." << std::endl;
}
/*
@@ -43,7 +46,7 @@ void Input::handle_keypressed(SDL_keysym* keysym)
{
switch( keysym->sym ) {
case SDLK_ESCAPE:
- client::shutdown();
+ client::application.shutdown();
break;
case SDLK_LEFT:
camera.rotate_left();
@@ -88,7 +91,7 @@ void Input::process()
handle_keyreleased( &event.key.keysym );
break;
case SDL_QUIT:
- client::shutdown();
+ client::application.shutdown();
break;
}
diff --git a/src/client/main.cc b/src/client/main.cc
index 7c5f7b7..6955042 100644
--- a/src/client/main.cc
+++ b/src/client/main.cc
@@ -7,9 +7,8 @@
int main( int argc, char *argv[] )
{
- client::init();
-
- client::run();
-
- client::shutdown();
+ client::application.init();
+ client::application.run();
+ client::application.shutdown();
}
+
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index dd5c5d1..a3f50a6 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -1,6 +1,6 @@
METASOURCES = AUTO
-libcommon_la_SOURCES = common.cc console.cc
+libcommon_la_SOURCES = consoleinterface.cc
libcommon_la_LDFLAGS = -avoid-version -no-undefined
noinst_LTLIBRARIES = libcommon.la
-noinst_HEADERS = common.h console.h
+noinst_HEADERS = common.h consoleinterface.h
INCLUDES = -I$(top_srcdir)/src
diff --git a/src/common/common.cc b/src/common/common.cc
deleted file mode 100644
index cb968c0..0000000
--- a/src/common/common.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- common/common.cc
- This file is part of the Osirion project and is distributed under
- the terms of the GNU General Public License version 2
-*/
-
-#include "common/common.h"
-
-namespace common {
-
-void init() {
- con_debug << "Initializing common..." << std::endl;
-}
-
-void shutdown() {
- con_debug << "Shutting down common..." << std::endl;
-}
-
-}
-
diff --git a/src/common/common.h b/src/common/common.h
index 1be6827..61aa47c 100644
--- a/src/common/common.h
+++ b/src/common/common.h
@@ -9,18 +9,11 @@
#include "config.h"
-/// common functions and components that are used by the other subsytems
-namespace common {
+/// common functions and components that can be use by any subsytem
+namespace common {}
- /// initialize common components
- void init();
+#include "common/consoleinterface.h"
- /// shutdown common components
- void shutdown();
-
-}
-
-#include "common/console.h"
#endif // __INCLUDED_COMMON_H__
diff --git a/src/common/console.cc b/src/common/console.cc
deleted file mode 100644
index a7d0dd7..0000000
--- a/src/common/console.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- common/console.cc
- This file is part of the Osirion project and is distributed under
- the terms of the GNU General Public License version 2
-*/
-
-#include "common/console.h"
-
-#include <iostream>
-
-#include <stdlib.h>
-
-namespace common {
-
-Console *Console::console_instance = 0;
-
-Console::Console() {
- if (console_instance) {
- std::cerr << "duplicate common::Console::console_instance" << std::endl;
- exit(2);
- }
- console_instance = this;
-}
-
-Console::~Console()
-{
- console_instance = 0;
-}
-
-Console *Console::instance()
-{
- return console_instance;
-}
-
-} // namespace common
-
diff --git a/src/common/consoleinterface.cc b/src/common/consoleinterface.cc
new file mode 100644
index 0000000..eb532c6
--- /dev/null
+++ b/src/common/consoleinterface.cc
@@ -0,0 +1,36 @@
+/*
+ common/consoleinterface.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "common/consoleinterface.h"
+
+#include <iostream>
+
+#include <stdlib.h>
+
+namespace common {
+
+ConsoleInterface *ConsoleInterface::consoleinterface_instance = 0;
+
+ConsoleInterface::ConsoleInterface() {
+ if (consoleinterface_instance) {
+ std::cerr << "multiple singleton instances: common::ConsoleInterface" << std::endl;
+ exit(2);
+ }
+ consoleinterface_instance = this;
+}
+
+ConsoleInterface::~ConsoleInterface()
+{
+ consoleinterface_instance = 0;
+}
+
+ConsoleInterface *ConsoleInterface::instance()
+{
+ return consoleinterface_instance;
+}
+
+} // namespace common
+
diff --git a/src/common/console.h b/src/common/consoleinterface.h
index 0706f11..ec77e1d 100644
--- a/src/common/console.h
+++ b/src/common/consoleinterface.h
@@ -1,11 +1,11 @@
/*
- common/console.h
+ common/consoleinterface.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_COMMON_CONSOLE_H__
-#define __INCLUDED_COMMON_CONSOLE_H__
+#ifndef __INCLUDED_COMMON_CONSOLEINTERFACE_H__
+#define __INCLUDED_COMMON_CONSOLEINTERFACE_H__
// project headers
#include "common/common.h"
@@ -14,27 +14,27 @@
#include <iostream>
/// global define to send a message to the system console
-#define con_print common::Console::instance()->messagestream()
+#define con_print common::ConsoleInterface::instance()->messagestream()
/// global define to send a warning message to the system console
-#define con_warn common::Console::instance()->warningstream()
+#define con_warn common::ConsoleInterface::instance()->warningstream()
#ifdef HAVE_DEBUG_MESSAGES
/// global define to send a debug message to the system console
-#define con_debug common::Console::instance()->debugstream()
+#define con_debug common::ConsoleInterface::instance()->debugstream()
#else
#define con_debug if (0) *(std::ostream*)(0)
#endif
namespace common {
-/// interface for a console object that writes messages on the screen
-class Console {
+/// common interface for the client and server Console classes
+class ConsoleInterface {
public:
/// default constructor
- Console();
+ ConsoleInterface();
/// default destructor
- virtual ~Console();
+ virtual ~ConsoleInterface();
/// stream to send normal messages too
virtual std::ostream & messagestream() = 0;
@@ -46,15 +46,14 @@ public:
virtual std::ostream & debugstream() = 0;
/// a pointer to the current console instance
- static Console *instance();
+ static ConsoleInterface *instance();
private:
/// console singleton
- static Console *console_instance;
-}
-; // class Console
+ static ConsoleInterface *consoleinterface_instance;
+};
} // namespace common
-#endif // __INCLUDED_COMMON_CONSOLE_H__
+#endif // __INCLUDED_COMMON_CONSOLEINTERFACE_H__
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index 1f1cc2e..b062f9e 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -1,12 +1,12 @@
METASOURCES = AUTO
INCLUDES = -I$(top_srcdir)/src
-libcore_la_SOURCES = core.cc game.cc
+libcore_la_SOURCES = applicationinterface.cc gameinterface.cc
libcore_la_LDFLAGS = -avoid-version
libcore_la_LIBADD = $(top_builddir)/src/math/libmath.la \
$(top_builddir)/src/common/libcommon.la \
$(top_builddir)/src/filesystem/libfilesystem.la
noinst_LTLIBRARIES = libcore.la
-noinst_HEADERS = core.h game.h
+noinst_HEADERS = applicationinterface.h core.h gameinterface.h
diff --git a/src/core/applicationinterface.cc b/src/core/applicationinterface.cc
new file mode 100644
index 0000000..9ef5c16
--- /dev/null
+++ b/src/core/applicationinterface.cc
@@ -0,0 +1,68 @@
+/*
+ core/applicationinterface.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "core/core.h"
+#include "filesystem/filesystem.h"
+#include "common/common.h"
+
+#include <iostream>
+
+#include <stdlib.h>
+
+namespace core {
+
+ApplicationInterface *ApplicationInterface::applicationinterface_instance = 0;
+
+ApplicationInterface::ApplicationInterface() {
+ if (applicationinterface_instance) {
+ std::cerr << "multiple singleton instances: core::ApplicationInterface" << std::endl;
+ exit(2);
+ }
+ applicationinterface_instance = this;
+}
+
+ApplicationInterface::~ApplicationInterface()
+{
+ applicationinterface_instance = 0;
+}
+
+ApplicationInterface *ApplicationInterface::instance()
+{
+ return applicationinterface_instance;
+}
+
+void ApplicationInterface::init()
+{
+ filesystem::init();
+
+ con_debug << "Initializing core..." << std::endl;
+
+ if (game())
+ game()->init();
+ else
+ con_warn << "No game module found!" << std::endl;
+
+}
+
+void ApplicationInterface::shutdown()
+{
+ con_debug << "Shutting down core..." << std::endl;
+
+ if (game())
+ game()->shutdown();
+ else
+ con_warn << "No game module found!" << std::endl;
+
+ filesystem::shutdown();
+}
+
+void ApplicationInterface::frame(float seconds)
+{
+ if (game())
+ game()->frame(seconds);
+}
+
+}
diff --git a/src/core/applicationinterface.h b/src/core/applicationinterface.h
new file mode 100644
index 0000000..19eaee6
--- /dev/null
+++ b/src/core/applicationinterface.h
@@ -0,0 +1,42 @@
+/*
+ core/applicationinterface.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_APPLICATIONINTERFACE_H__
+#define __INCLUDED_CORE_APPLICATIONINTERFACE_H__
+
+namespace core {
+
+/// core interface for the client and server Application classes
+class ApplicationInterface {
+public:
+ /// default constructor
+ ApplicationInterface();
+
+ /// default destructor
+ virtual ~ApplicationInterface();
+
+ /// initialize the application
+ virtual void init();
+
+ /// shutdown the application
+ virtual void shutdown();
+
+ /// run a core frame
+ virtual void frame(float seconds);
+
+ /// a pointer to the current console instance
+ static ApplicationInterface *instance();
+
+private:
+ /// console singleton
+ static ApplicationInterface *applicationinterface_instance;
+};
+
+
+} // namespace core
+
+#endif // __INCLUDED_CORE_APPLICATIONINTERFACE_H__
+
diff --git a/src/core/core.cc b/src/core/core.cc
deleted file mode 100644
index 0a4ed60..0000000
--- a/src/core/core.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- core/core.cc
- This file is part of the Osirion project and is distributed under
- the terms of the GNU General Public License version 2
-*/
-
-// project headers
-#include "common/common.h"
-#include "filesystem/filesystem.h"
-#include "core/core.h"
-
-namespace core
-{
-
-void init()
-{
- con_debug << "Initializing core..." << std::endl;
-
- common::init();
-
- filesystem::init();
-
- if (::core::Game::instance())
- ::core::Game::instance()->init();
- else
- con_warn << "No game module found!" << std::endl;
-
-}
-
-void shutdown()
-{
- con_debug << "Shutting down core..." << std::endl;
-
- if (::core::Game::instance())
- ::core::Game::instance()->shutdown();
- else
- con_warn << "No game module found!" << std::endl;
-
- filesystem::shutdown();
-
- common::shutdown();
-}
-
-void frame(float sec)
-{
- if (::core::Game::instance())
- ::core::Game::instance()->frame(sec);
-}
-
-} //namespace core
diff --git a/src/core/core.h b/src/core/core.h
index 09c7209..745fd86 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -7,20 +7,18 @@
#ifndef __INCLUDED_CORE_H__
#define __INCLUDED_CORE_H__
+#include "core/gameinterface.h"
+#include "core/applicationinterface.h"
+
/// core contains the basic functionality of the engine
namespace core
{
- /// initialize the core
- void init();
-
- /// shutdown the core
- void shutdown();
+ inline GameInterface *game() { return GameInterface::instance(); }
- /// run one frame
- void frame(float sec);
+ inline ApplicationInterface *application() { return ApplicationInterface::instance(); }
+
};
-#include "core/game.h"
#endif // __INCLUDED_CORE_H__
diff --git a/src/core/gameinterface.cc b/src/core/gameinterface.cc
new file mode 100644
index 0000000..964da2d
--- /dev/null
+++ b/src/core/gameinterface.cc
@@ -0,0 +1,37 @@
+/*
+ core/game.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "core/gameinterface.h"
+
+#include <iostream>
+
+#include <stdlib.h>
+
+namespace core {
+
+GameInterface *GameInterface::gameinterface_instance = 0;
+
+GameInterface::GameInterface()
+{
+ if (gameinterface_instance) {
+ std::cerr << "multiple singleton instances: core::GameInterface" << std::endl;
+ exit(2);
+ }
+ gameinterface_instance = this;
+}
+
+GameInterface::~GameInterface()
+{
+ gameinterface_instance = 0;
+}
+
+GameInterface *GameInterface::instance()
+{
+ return gameinterface_instance;
+}
+
+}
+
diff --git a/src/core/gameinterface.h b/src/core/gameinterface.h
new file mode 100644
index 0000000..3bd887c
--- /dev/null
+++ b/src/core/gameinterface.h
@@ -0,0 +1,44 @@
+/*
+ core/game.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_GAMEINTERFACE_H__
+#define __INCLUDED_CORE_GAMEINTERFACE_H__
+
+namespace core
+{
+
+/// abstract interface from the core to the game-specific code
+/** The real game class has to derive from this class
+ */
+class GameInterface {
+public:
+ /// create a new game singleton
+ GameInterface();
+ /// destroy the game singleton
+ virtual ~GameInterface();
+
+ /// initialize the game
+ virtual void init() = 0;
+
+ /// shutdown the game
+ virtual void shutdown() = 0;
+
+ /// run one frame of the game
+ /** @param sec time since the previous frame, in seconds
+ */
+ virtual void frame (float sec) = 0;
+
+ /// a pointer to the current game instance
+ static GameInterface * instance();
+
+private:
+ /// game singleton
+ static GameInterface *gameinterface_instance;
+};
+
+}
+
+#endif // __INCLUDED_CORE_GAMEINTERFACE_H__
diff --git a/src/game/game.h b/src/game/game.h
index ee9e286..5a0afc7 100644
--- a/src/game/game.h
+++ b/src/game/game.h
@@ -25,7 +25,7 @@ extern Ship ship;
/// the only star in the game
extern Star star;
-class Game : public core::Game {
+class Game : public core::GameInterface {
public:
/// initialize the game
void init();
diff --git a/src/server/Makefile.am b/src/server/Makefile.am
index f842c05..c8695ca 100644
--- a/src/server/Makefile.am
+++ b/src/server/Makefile.am
@@ -1,12 +1,12 @@
METASOURCES = AUTO
bin_PROGRAMS = osiriond
-osiriond_SOURCES = console.cc main.cc server.cc timer.cc
+osiriond_SOURCES = application.cc console.cc main.cc server.cc timer.cc
osiriond_LDADD = $(top_builddir)/src/math/libmath.la \
$(top_builddir)/src/common/libcommon.la \
$(top_builddir)/src/filesystem/libfilesystem.la \
$(top_builddir)/src/core/libcore.la \
$(top_builddir)/src/game/libgame.la
-noinst_HEADERS = console.h server.h timer.h
+noinst_HEADERS = application.h console.h server.h timer.h
INCLUDES = -I$(top_srcdir)/src
diff --git a/src/server/application.cc b/src/server/application.cc
new file mode 100644
index 0000000..b6cd91f
--- /dev/null
+++ b/src/server/application.cc
@@ -0,0 +1,50 @@
+/*
+ server/application.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
+*/
+
+// project headers
+#include "server/server.h"
+#include "server/application.h"
+#include "server/timer.h"
+#include "core/core.h"
+
+namespace server {
+
+void Application::init()
+{
+ // initialize core
+ core::ApplicationInterface::init();
+
+ con_debug << "Initializing server..." << std::endl;
+}
+
+void Application::run()
+{
+ const float server_framerate = 1.0f / 20.0f;
+ server::Timer timer;
+
+ timer.mark();
+
+ while(true) {
+ float elapsed = timer.elapsed();
+
+ frame(elapsed);
+
+ timer.sleep(server_framerate - elapsed);
+ timer.mark();
+ }
+
+}
+
+void Application::shutdown()
+{
+ con_debug << "Shutting down server..." << std::endl;
+
+ core::ApplicationInterface::shutdown();
+
+ exit(0);
+}
+
+}
diff --git a/src/server/application.h b/src/server/application.h
new file mode 100644
index 0000000..c12a608
--- /dev/null
+++ b/src/server/application.h
@@ -0,0 +1,29 @@
+/*
+ server/application.h
+ This file is part of the Osirion project and is distributed under
+ the terms and conditions of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_SERVER_APPLICATION_H__
+#define __INCLUDED_SERVER_APPLICATION_H__
+
+#include "core/applicationinterface.h"
+
+namespace server {
+
+/// server Application implementation
+class Application : 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();
+};
+
+}
+#endif // __INCLUDED_SERVER_APPLICATION_H__
+
diff --git a/src/server/console.h b/src/server/console.h
index 45563a4..188d2b6 100644
--- a/src/server/console.h
+++ b/src/server/console.h
@@ -7,12 +7,12 @@
#ifndef __INCLUDED_SERVER_CONSOLE_H__
#define __INCLUDED_SERVER_CONSOLE_H__
-#include "common/console.h"
+#include "common/consoleinterface.h"
namespace server {
-/// the server console
-class Console : public common::Console {
+/// server console implementation
+class Console : public common::ConsoleInterface {
public:
/// stream to send normal messages too
virtual std::ostream & messagestream();
diff --git a/src/server/main.cc b/src/server/main.cc
index 56b29a8..052c68d 100644
--- a/src/server/main.cc
+++ b/src/server/main.cc
@@ -8,9 +8,7 @@
int main( int argc, char *argv[] )
{
- server::init();
-
- server::run();
-
- server::shutdown();
+ server::application.init();
+ server::application.run();
+ server::application.shutdown();
}
diff --git a/src/server/server.cc b/src/server/server.cc
index 69c58b2..ad8960e 100644
--- a/src/server/server.cc
+++ b/src/server/server.cc
@@ -5,52 +5,16 @@
*/
// project headers
-#include "server/server.h"
+
+#include "server/application.h"
+#include "server/console.h"
#include "game/game.h"
-#include "core/core.h"
-#include "common/common.h"
namespace server {
-// private instance of the server console object
-Console console_instance;
-// private instance of the game object
-game::Game game_instance;
-
-void init()
-{
- // initialize core
- core::init();
-
- con_debug << "Initializing server..." << std::endl;
-}
-
-void run()
-{
-
- const float server_framerate = 1.0f / 20.0f;
- server::Timer timer;
+Application application;
+Console console;
+game::Game Game;
- timer.mark();
-
- while(true) {
- float elapsed = timer.elapsed();
-
- core::frame(elapsed);
-
- timer.sleep(server_framerate - elapsed);
- timer.mark();
- }
-
}
-void shutdown()
-{
- con_debug << "Shutting down server..." << std::endl;
-
- core::shutdown();
-
- exit(0);
-}
-
-}
diff --git a/src/server/server.h b/src/server/server.h
index 1f839a5..14d1d4b 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -7,16 +7,23 @@
#ifndef __INCLUDED_SERVER_H__
#define __INCLUDED_SERVER_H__
-#include "server/timer.h"
+#include "server/application.h"
#include "server/console.h"
+#include "game/game.h"
+/// contains classes and functions to run a dedicated server
namespace server {
- /// initialize the server
- void init();
- /// run the server
- void run();
- /// shutdown the server
- void shutdown();
-}
+
+/// global server application instance
+extern Application application;
+
+/// global server console instance
+extern Console console;
+
+/// global Game instance
+extern game::Game game;
+
+} // namespace server
#endif // __INCLUDED_SERVER_H__
+