forked from CPP-Final-Project/Chat_Server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDBConncetion_Service.cpp
More file actions
78 lines (65 loc) · 2.64 KB
/
DBConncetion_Service.cpp
File metadata and controls
78 lines (65 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "DBConncetion_Service.h"
namespace DBService {
QString DBConnection_Service::a_connection_string;
QList<QSharedPointer<DBConnection_Service>> DBConnection_Service::connections_pool;
quint32 DBConnection_Service::pool_size;
void DBConnection_Service::openConnection()
{
try
{
shp_database = QSharedPointer<QSqlDatabase>::create(QSqlDatabase::addDatabase("QODBC", "connection" + QString::number(connection_id)));
shp_database->setDatabaseName(a_connection_string);
if (shp_database->open()) {
PLOG_INFO << "Connected to DB. Connection id: " + QString::number(connection_id);
}
else PLOGE << "DB " + shp_database->lastError().databaseText() + shp_database->connectionName();
}
catch (const std::exception& exception)
{
PLOG_ERROR << "Exception while connecting to DB. Connection id: " + QString::number(connection_id) << exception.what();
}
}
void DBConnection_Service::closeConnection()
{
try
{
if (shp_database->isOpen()) {
shp_database->close();
PLOG_INFO << "Connection to db closed. Connection id: " + QString::number(connection_id);
}
}
catch (const std::exception& exception)
{
PLOG_ERROR << "Exception while closing connection to db. Connection id: " + QString::number(connection_id) << exception.what();
}
}
QSharedPointer<DBConnection_Service> DBConnection_Service::getConnection()
{
auto rand = QRandomGenerator::global()->bounded(pool_size);
return connections_pool[rand];
}
DBConnection_Service::DBConnection_Service(const QString& connection_string_, const quint32& connection_id_) : connection_id(connection_id_) { a_connection_string = connection_string_; };
QFuture<void> DBConnection_Service::init(qint32 pool_size_)
{
pool_size = pool_size_;
for (qint32 i = 0; i < pool_size; i++)
{
auto new_connection = QSharedPointer<DBConnection_Service>(new DBConnection_Service(a_connection_string, i));
connections_pool.append(new_connection);
}
PLOGD << "Initializing DBConnection_Service...";
return QtConcurrent::map(connections_pool, [](QSharedPointer<DBConnection_Service> connection) {
connection->openConnection();
});
}
QFuture<void> DBConnection_Service::exit()
{
PLOGD << "Exiting DBConnection_Service...";
return QtConcurrent::map(connections_pool, [](QSharedPointer<DBConnection_Service> connection) {
connection->closeConnection();
});
}
QSharedPointer<QSqlDatabase> DBConnection_Service::getDatabase() { return shp_database; }
QString DBConnection_Service::getConnectionString() { return a_connection_string; }
void DBConnection_Service::setConnectionString(const QString& connection_string_) { a_connection_string = connection_string_; }
}