00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #ifndef __ENGINEPLUGIN_H__
00025 #define __ENGINEPLUGIN_H__
00026 
00027 #include <QtContainerFwd>
00028 #include <QString>
00029 #include <QVector>
00030 #include "global.h"
00031 #include "serverapi/serverstructs.h"
00032 
00033 #define DECLARE_PLUGIN(XEnginePlugin) \
00034         public: \
00035                 static EnginePlugin *staticInstance() { return &__Static_Instance; } \
00036         protected: \
00037                 static XEnginePlugin __Static_Instance;
00038 
00039 #define INSTALL_PLUGIN(XEnginePlugin) \
00040         XEnginePlugin XEnginePlugin::__Static_Instance; \
00041         extern "C" PLUGIN_EXPORT EnginePlugin *doomSeekerInit() \
00042         { \
00043                 return XEnginePlugin::staticInstance(); \
00044         }
00045 
00046 class Binaries;
00047 class ConfigurationBaseBox;
00048 class GameCVar;
00049 class GameMode;
00050 class IniSection;
00051 class IRCNetworkEntity;
00052 class MasterClient;
00053 class Server;
00054 class QHostAddress;
00055 class QPixmap;
00056 class QWidget;
00057 
00058 class MAIN_EXPORT EnginePlugin
00059 {
00060         protected:
00066                 enum InitFeatures
00067                 {
00068                         EP_Done, 
00069 
00070                         EP_Author, 
00071                         EP_Version, 
00072 
00073                         EP_AllDMFlags, 
00074                         EP_AllowsConnectPassword, 
00075                         EP_AllowsEmail, 
00076                         EP_AllowsURL, 
00077                         EP_AllowsJoinPassword, 
00078                         EP_AllowsRConPassword, 
00079                         EP_AllowsMOTD, 
00080                         EP_DefaultMaster, 
00081                         EP_DefaultServerPort, 
00082                         EP_GameModes, 
00083                         EP_GameModifiers, 
00084                         EP_HasMasterServer, 
00085                         EP_InGameFileDownloads, 
00086                         EP_IRCChannel, 
00087                         EP_SupportsRandomMapRotation, 
00088                         EP_RefreshThreshold 
00089                 };
00090 
00092                 virtual void                                                    setupConfig(IniSection &config) const {}
00093 
00094         public:
00099                 class Data
00100                 {
00101                         public:
00103                                 const DMFlags*                  allDMFlags;
00104                                 bool                                    allowsConnectPassword;
00105                                 bool                                    allowsEmail;
00106                                 bool                                    allowsJoinPassword;
00107                                 bool                                    allowsMOTD;
00108                                 bool                                    allowsRConPassword;
00109                                 bool                                    allowsURL;
00110                                 QString                                 author;
00112                                 QString                                 defaultMaster;
00113                                 quint16                                 defaultServerPort;
00115                                 const QList<GameMode>*  gameModes;
00123                                 const QList<GameCVar>*  gameModifiers;
00124                                 bool                                    hasMasterServer;
00126                                 QPixmap                                 *icon;
00127                                 bool                                    inGameFileDownloads;
00128                                 QVector<IRCNetworkEntity> ircChannels;
00129                                 QString                                 name;
00130                                 IniSection                              *pConfig;
00131                                 quint8                                  refreshThreshold;
00132                                 bool                                    supportsRandomMapRotation;
00133                                 bool                                    valid;
00134                                 unsigned int                    version;
00135 
00136                                 Data();
00137                 };
00138 
00139                 EnginePlugin();
00140                 virtual ~EnginePlugin();
00141 
00151                 void init(const char* name, const char* const icon[], ...);
00152 
00156                 virtual ConfigurationBaseBox*   configuration(QWidget *parent) const;
00157 
00158                 const Data                                              *data() const { return d; }
00159                 const QPixmap                                   &icon() const { return *d->icon; }
00160                 void                                                    setConfig(IniSection &cfg) const;
00161 
00166                 virtual QList<GameCVar>                 limits(const GameMode& mode) const { return QList<GameCVar>(); }
00167 
00171                 virtual MasterClient*                   masterClient() const { return NULL; }
00175                 void                                                    masterHost(QString &host, unsigned short &port) const;
00176 
00182                 virtual Server*                                 server(const QHostAddress &address, unsigned short port) const = 0;
00183 
00184         private:
00185                 Data    *d;
00186 };
00187 
00188 #endif