1 ////////////////////////////////////////////////////////////////////////////////
2 //    Scorched3D (c) 2000-2011
3 //
4 //    This file is part of Scorched3D.
5 //
6 //    Scorched3D is free software; you can redistribute it and/or modify
7 //    it under the terms of the GNU General Public License as published by
8 //    the Free Software Foundation; either version 2 of the License, or
9 //    (at your option) any later version.
10 //
11 //    Scorched3D is distributed in the hope that it will be useful,
12 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 //    GNU General Public License for more details.
15 //
16 //    You should have received a copy of the GNU General Public License along
17 //    with this program; if not, write to the Free Software Foundation, Inc.,
18 //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 ////////////////////////////////////////////////////////////////////////////////
20 
21 #if !defined(__INCLUDE_ScorchedServerh_INCLUDE__)
22 #define __INCLUDE_ScorchedServerh_INCLUDE__
23 
24 #include <engine/ScorchedContext.h>
25 #include <server/ScorchedServerSettings.h>
26 #include <string>
27 
28 class ProgressCounter;
29 class TankDeadContainer;
30 class TankAIStore;
31 class EconomyStore;
32 class ServerSimulator;
33 class ServerDestinations;
34 class ServerState;
35 class ServerAuthHandler;
36 class ServerAuthHandlerStore;
37 class ServerTimedMessage;
38 class ServerBanned;
39 class ServerTextFilter;
40 class ServerHandlers;
41 class ServerLoadLevel;
42 class ServerConnectAuthHandler;
43 class ServerAdminSessions;
44 class ServerChannelManager;
45 class ServerSyncCheck;
46 class ServerMessageHandler;
47 class ServerFileServer;
48 
49 class ScorchedServer : public ScorchedContext
50 {
51 public:
52 	static ScorchedServer *instance();
53 
54 	static bool startServer(const ScorchedServerSettings &settings,
55 		bool local, ProgressCounter *counter);
56 	static void stopServer();
serverStarted()57 	static bool serverStarted() { return started_; }
58 
getServerMode()59 	virtual bool getServerMode() { return true; }
60 
61 	virtual Simulator &getSimulator();
getTargetSpace()62 	virtual TargetSpace &getTargetSpace() { return *targetSpace_; }
getTankDeadContainer()63 	TankDeadContainer &getTankDeadContainer() { return *deadContainer_; }
getContext()64 	ScorchedContext &getContext() { return *this; }
getTankAIs()65 	TankAIStore &getTankAIs() { return *tankAIStore_; }
getServerSimulator()66 	ServerSimulator &getServerSimulator() { return *serverSimulator_; }
getServerDestinations()67 	ServerDestinations &getServerDestinations() { return *serverDestinations_; }
getServerState()68 	ServerState &getServerState() { return *serverState_; }
69 	ServerAuthHandler *getAuthHandler();
getTimedMessage()70 	ServerTimedMessage &getTimedMessage() { return *timedMessage_; }
getBannedPlayers()71 	ServerBanned &getBannedPlayers() { return *bannedPlayers_; }
getTextFilter()72 	ServerTextFilter &getTextFilter() { return *textFilter_; }
getServerHandlers()73 	ServerHandlers &getServerHandlers() { return *serverHandlers_; }
getServerLoadLevel()74 	ServerLoadLevel &getServerLoadLevel() { return *serverLoadLevel_; }
75 	ServerConnectAuthHandler &getServerConnectAuthHandler();
getServerChannelManager()76 	ServerChannelManager &getServerChannelManager() { return *serverChannelManager_; }
getServerAdminSessions()77 	ServerAdminSessions &getServerAdminSessions() { return *serverAdminSessions_; }
getServerSyncCheck()78 	ServerSyncCheck &getServerSyncCheck() { return *serverSyncCheck_; }
getServerMessageHandler()79 	ServerMessageHandler &getServerMessageHandler() { return *serverMessageHandler_; }
getServerFileServer()80 	ServerFileServer &getServerFileServer() { return *serverFileServer_; }
getEconomyStore()81 	EconomyStore &getEconomyStore() { return *economyStore_; }
82 
83 protected:
84 	static ScorchedServer *instance_;
85 	static bool started_;
86 	static TargetSpace *targetSpace_;
87 
88 	TankDeadContainer *deadContainer_;
89 	TankAIStore *tankAIStore_;
90 	ServerSimulator *serverSimulator_;
91 	ServerDestinations *serverDestinations_;
92 	ServerState *serverState_;
93 	ServerAuthHandlerStore *authHandler_;
94 	ServerTimedMessage *timedMessage_;
95 	ServerBanned *bannedPlayers_;
96 	ServerTextFilter *textFilter_;
97 	ServerHandlers *serverHandlers_;
98 	ServerLoadLevel *serverLoadLevel_;
99 	ServerChannelManager *serverChannelManager_;
100 	ServerAdminSessions *serverAdminSessions_;
101 	ServerSyncCheck *serverSyncCheck_;
102 	ServerMessageHandler *serverMessageHandler_;
103 	ServerFileServer *serverFileServer_;
104 	EconomyStore *economyStore_;
105 
106 	void checkSettings();
107 	bool startServerInternal(const ScorchedServerSettings &settings,
108 		bool local, ProgressCounter *counter);
109 
110 private:
111 	ScorchedServer();
112 	virtual ~ScorchedServer();
113 };
114 
115 #endif
116