mirror of
https://github.com/ddnet/ddnet.git
synced 2024-10-20 07:48:18 +00:00
47 lines
967 B
C
47 lines
967 B
C
|
#ifndef ENGINE_SERVER_DATABASES_CONNECTION_POOL_H
|
||
|
#define ENGINE_SERVER_DATABASES_CONNECTION_POOL_H
|
||
|
|
||
|
#include "connection.h"
|
||
|
|
||
|
#include <base/tl/threading.h>
|
||
|
#include <memory>
|
||
|
#include <vector>
|
||
|
|
||
|
struct ISqlData
|
||
|
{
|
||
|
virtual ~ISqlData();
|
||
|
};
|
||
|
|
||
|
class CDbConnectionPool
|
||
|
{
|
||
|
public:
|
||
|
CDbConnectionPool();
|
||
|
~CDbConnectionPool();
|
||
|
|
||
|
enum Mode
|
||
|
{
|
||
|
READ,
|
||
|
WRITE,
|
||
|
WRITE_BACKUP,
|
||
|
NUM_MODES,
|
||
|
};
|
||
|
|
||
|
void RegisterDatabase(std::unique_ptr<IDbConnection> pDatabase, Mode DatabaseMode);
|
||
|
|
||
|
void Execute(
|
||
|
bool (*pFuncPtr) (IDbConnection *, const ISqlData *),
|
||
|
std::unique_ptr<ISqlData> pSqlRequestData);
|
||
|
// writes to WRITE_BACKUP server in case of failure
|
||
|
void ExecuteWrite(
|
||
|
bool (*pFuncPtr) (IDbConnection *, const ISqlData *),
|
||
|
std::unique_ptr<ISqlData> pSqlRequestData);
|
||
|
|
||
|
void Shutdown();
|
||
|
|
||
|
private:
|
||
|
std::vector<std::unique_ptr<IDbConnection>> m_aapDbConnections[NUM_MODES];
|
||
|
lock m_ConnectionLookupLock[NUM_MODES];
|
||
|
};
|
||
|
|
||
|
#endif // ENGINE_SERVER_DATABASES_CONNECTION_POOL_H
|