mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
#ifndef GRADIDO_LOGIN_SERVER_SINGLETON_MANAGER_CONNECTION_MANAGER_INCLUDE
|
|
#define GRADIDO_LOGIN_SERVER_SINGLETON_MANAGER_CONNECTION_MANAGER_INCLUDE
|
|
|
|
#include "../lib/DRHashList.h"
|
|
#include <string>
|
|
|
|
#include "Poco/Util/LayeredConfiguration.h"
|
|
#include "Poco/Data/SessionPoolContainer.h"
|
|
#include "../MySQL/Poco/Connector.h"
|
|
#include "Poco/Exception.h"
|
|
|
|
#include "../lib/NotificationList.h"
|
|
|
|
enum ConnectionType {
|
|
CONNECTION_MYSQL_LOGIN_SERVER,
|
|
CONNECTION_MYSQL_PHP_SERVER,
|
|
CONNECTION_MAX
|
|
};
|
|
|
|
class ConnectionManager : public NotificationList
|
|
{
|
|
public:
|
|
~ConnectionManager();
|
|
|
|
static ConnectionManager* getInstance();
|
|
|
|
bool setConnectionsFromConfig(const Poco::Util::LayeredConfiguration& config, ConnectionType type);
|
|
|
|
//! \param connectionString example: host=localhost;port=3306;db=mydb;user=alice;password=s3cr3t;compress=true;auto-reconnect=true
|
|
inline void setConnection(std::string connectionString, ConnectionType type) {
|
|
if (type == CONNECTION_MYSQL_LOGIN_SERVER) {
|
|
mSessionPoolNames[type] = Poco::Data::Session::uri(Poco::Data::MySQL::Connector::KEY, connectionString);
|
|
mSessionPools.add(Poco::Data::MySQL::Connector::KEY, connectionString, 1, 16);
|
|
//mConnectionData[type] = connectionString;
|
|
}
|
|
}
|
|
|
|
//! \brief return connection from pool, check if connected in if not, call reconnect on it
|
|
//!
|
|
//! In the past I used auto-reconnect but it didn't work everytime as expectet
|
|
Poco::Data::Session getConnection(ConnectionType type);
|
|
|
|
protected:
|
|
ConnectionManager();
|
|
|
|
private:
|
|
std::string mSessionPoolNames[CONNECTION_MAX];
|
|
Poco::Data::SessionPoolContainer mSessionPools;
|
|
Poco::FastMutex mWorkingMutex;
|
|
|
|
};
|
|
|
|
#endif //GRADIDO_LOGIN_SERVER_SINGLETON_MANAGER_CONNECTION_MANAGER_INCLUDE
|