dvander@667: /** dvander@667: * vim: set ts=4 : dvander@667: * =============================================================== dvander@667: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@667: * =============================================================== dvander@667: * dvander@667: * This file is not open source and may not be copied without explicit dvander@667: * written permission of AlliedModders LLC. This file may not be redistributed dvander@667: * in whole or significant part. dvander@667: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@667: * dvander@667: * Version: $Id$ dvander@667: */ dvander@667: dvander@666: #ifndef _INCLUDE_DATABASE_MANAGER_H_ dvander@666: #define _INCLUDE_DATABASE_MANAGER_H_ dvander@666: dvander@666: #include dvander@666: #include "sm_globals.h" dvander@666: #include dvander@868: #include dvander@868: #include dvander@868: #include dvander@868: #include "sm_memtable.h" dvander@666: dvander@666: using namespace SourceHook; dvander@666: dvander@868: struct ConfDbInfo dvander@868: { dvander@868: ConfDbInfo() : name(-1), driver(-1), host(-1), user(-1), pass(-1), dvander@868: database(-1), realDriver(NULL) dvander@868: { dvander@868: } dvander@868: int name; dvander@868: int driver; dvander@868: int host; dvander@868: int user; dvander@868: int pass; dvander@868: int database; dvander@868: IDBDriver *realDriver; dvander@868: DatabaseInfo info; dvander@868: }; dvander@868: dvander@666: class DBManager : dvander@666: public IDBManager, dvander@666: public SMGlobalClass, dvander@868: public IHandleTypeDispatch, dvander@868: public ITextListener_SMC dvander@666: { dvander@858: public: dvander@868: DBManager(); dvander@868: public: dvander@666: const char *GetInterfaceName(); dvander@666: unsigned int GetInterfaceVersion(); dvander@666: public: //SMGlobalClass dvander@666: void OnSourceModAllInitialized(); dvander@868: void OnSourceModLevelChange(const char *mapName); dvander@858: void OnSourceModShutdown(); dvander@666: public: //IHandleTypeDispatch dvander@666: void OnHandleDestroy(HandleType_t type, void *object); dvander@666: public: //IDBManager dvander@858: void AddDriver(IDBDriver *pDrivera); dvander@666: void RemoveDriver(IDBDriver *pDriver); dvander@666: const DatabaseInfo *FindDatabaseConf(const char *name); dvander@858: bool Connect(const char *name, IDBDriver **pdr, IDatabase **pdb, bool persistent, char *error, size_t maxlength); dvander@666: unsigned int GetDriverCount(); dvander@858: IDBDriver *GetDriver(unsigned int index); dvander@858: Handle_t CreateHandle(DBHandleType type, void *ptr, IdentityToken_t *pToken); dvander@858: HandleError ReadHandle(Handle_t hndl, DBHandleType type, void **ptr); dvander@858: HandleError ReleaseHandle(Handle_t hndl, DBHandleType type, IdentityToken_t *token); dvander@868: public: //ITextListener_SMC dvander@868: void ReadSMC_ParseStart(); dvander@868: SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes); dvander@868: SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes); dvander@868: SMCParseResult ReadSMC_LeavingSection(); dvander@868: void ReadSMC_ParseEnd(bool halted, bool failed); dvander@868: public: dvander@868: ConfDbInfo *GetDatabaseConf(const char *name); dvander@868: IDBDriver *FindOrLoadDriver(const char *name); dvander@868: IDBDriver *GetDefaultDriver(); dvander@666: private: dvander@858: CVector m_drivers; dvander@868: List m_confs; dvander@666: HandleType_t m_DriverType; dvander@666: HandleType_t m_DatabaseType; dvander@868: String m_DefDriver; dvander@868: BaseStringTable m_StrTab; dvander@868: char m_Filename[PLATFORM_MAX_PATH]; dvander@868: unsigned int m_ParseLevel; dvander@868: unsigned int m_ParseState; dvander@868: IDBDriver *m_pDefault; dvander@666: }; dvander@666: dvander@666: extern DBManager g_DBMan; dvander@666: dvander@666: #endif //_INCLUDE_DATABASE_MANAGER_H_