core/Database.h
author Scott Ehlert <ds@alliedmods.net>
Fri Jun 01 06:33:54 2007 +0000 (2007-06-01)
changeset 873 a2136b3be10d
parent 868 bdbf922e246f
child 1096 8e11b2ebdc22
permissions -rw-r--r--
- Added natives: PrintToChat() and PrintCenterText()
- Bit of reorganization with moving some natives from sourcemod.inc to halflife.inc
dvander@667
     1
/**
dvander@667
     2
 * vim: set ts=4 :
dvander@667
     3
 * ===============================================================
dvander@667
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@667
     5
 * ===============================================================
dvander@667
     6
 *
dvander@667
     7
 * This file is not open source and may not be copied without explicit
dvander@667
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@667
     9
 * in whole or significant part.
dvander@667
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@667
    11
 *
dvander@667
    12
 * Version: $Id$
dvander@667
    13
 */
dvander@667
    14
dvander@666
    15
#ifndef _INCLUDE_DATABASE_MANAGER_H_
dvander@666
    16
#define _INCLUDE_DATABASE_MANAGER_H_
dvander@666
    17
dvander@666
    18
#include <IDBDriver.h>
dvander@666
    19
#include "sm_globals.h"
dvander@666
    20
#include <sh_vector.h>
dvander@868
    21
#include <sh_string.h>
dvander@868
    22
#include <sh_list.h>
dvander@868
    23
#include <ITextParsers.h>
dvander@868
    24
#include "sm_memtable.h"
dvander@666
    25
dvander@666
    26
using namespace SourceHook;
dvander@666
    27
dvander@868
    28
struct ConfDbInfo
dvander@868
    29
{
dvander@868
    30
	ConfDbInfo() : name(-1), driver(-1), host(-1), user(-1), pass(-1), 
dvander@868
    31
		database(-1), realDriver(NULL)
dvander@868
    32
	{
dvander@868
    33
	}
dvander@868
    34
	int name;
dvander@868
    35
	int driver;
dvander@868
    36
	int host;
dvander@868
    37
	int user;
dvander@868
    38
	int pass;
dvander@868
    39
	int database;
dvander@868
    40
	IDBDriver *realDriver;
dvander@868
    41
	DatabaseInfo info;
dvander@868
    42
};
dvander@868
    43
dvander@666
    44
class DBManager : 
dvander@666
    45
	public IDBManager,
dvander@666
    46
	public SMGlobalClass,
dvander@868
    47
	public IHandleTypeDispatch,
dvander@868
    48
	public ITextListener_SMC
dvander@666
    49
{
dvander@858
    50
public:
dvander@868
    51
	DBManager();
dvander@868
    52
public:
dvander@666
    53
	const char *GetInterfaceName();
dvander@666
    54
	unsigned int GetInterfaceVersion();
dvander@666
    55
public: //SMGlobalClass
dvander@666
    56
	void OnSourceModAllInitialized();
dvander@868
    57
	void OnSourceModLevelChange(const char *mapName);
dvander@858
    58
	void OnSourceModShutdown();
dvander@666
    59
public: //IHandleTypeDispatch
dvander@666
    60
	void OnHandleDestroy(HandleType_t type, void *object);
dvander@666
    61
public: //IDBManager
dvander@858
    62
	void AddDriver(IDBDriver *pDrivera);
dvander@666
    63
	void RemoveDriver(IDBDriver *pDriver);
dvander@666
    64
	const DatabaseInfo *FindDatabaseConf(const char *name);
dvander@858
    65
	bool Connect(const char *name, IDBDriver **pdr, IDatabase **pdb, bool persistent, char *error, size_t maxlength);
dvander@666
    66
	unsigned int GetDriverCount();
dvander@858
    67
	IDBDriver *GetDriver(unsigned int index);
dvander@858
    68
	Handle_t CreateHandle(DBHandleType type, void *ptr, IdentityToken_t *pToken);
dvander@858
    69
	HandleError ReadHandle(Handle_t hndl, DBHandleType type, void **ptr);
dvander@858
    70
	HandleError ReleaseHandle(Handle_t hndl, DBHandleType type, IdentityToken_t *token);
dvander@868
    71
public: //ITextListener_SMC
dvander@868
    72
	void ReadSMC_ParseStart();
dvander@868
    73
	SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes);
dvander@868
    74
	SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes);
dvander@868
    75
	SMCParseResult ReadSMC_LeavingSection();
dvander@868
    76
	void ReadSMC_ParseEnd(bool halted, bool failed);
dvander@868
    77
public:
dvander@868
    78
	ConfDbInfo *GetDatabaseConf(const char *name);
dvander@868
    79
	IDBDriver *FindOrLoadDriver(const char *name);
dvander@868
    80
	IDBDriver *GetDefaultDriver();
dvander@666
    81
private:
dvander@858
    82
	CVector<IDBDriver *> m_drivers;
dvander@868
    83
	List<ConfDbInfo> m_confs;
dvander@666
    84
	HandleType_t m_DriverType;
dvander@666
    85
	HandleType_t m_DatabaseType;
dvander@868
    86
	String m_DefDriver;
dvander@868
    87
	BaseStringTable m_StrTab;
dvander@868
    88
	char m_Filename[PLATFORM_MAX_PATH];
dvander@868
    89
	unsigned int m_ParseLevel;
dvander@868
    90
	unsigned int m_ParseState;
dvander@868
    91
	IDBDriver *m_pDefault;
dvander@666
    92
};
dvander@666
    93
dvander@666
    94
extern DBManager g_DBMan;
dvander@666
    95
dvander@666
    96
#endif //_INCLUDE_DATABASE_MANAGER_H_