Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
DatabaseQueue.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
DatabaseQueue.h
"
7
#include "
SQLOperation.h
"
8
#include "
Threading/BoostAsioExecutor.h
"
9
10
#include <future>
11
#include <mutex>
12
13
namespace
Skyfire
14
{
15
namespace
16
{
17
thread_local
MySQLConnection* CurrentDatabaseConnection =
nullptr
;
18
}
19
20
struct
DatabaseQueue::Impl
21
{
22
Impl
()
23
:
executor
(),
closed
(false)
24
{
25
executor
.KeepAlive();
26
}
27
28
Skyfire::Asio::IoContextExecutor
executor
;
29
std::mutex
stateLock
;
30
bool
closed
;
31
};
32
33
DatabaseQueue::DatabaseQueue
()
34
:
_impl
(new
Impl
)
35
{
36
}
37
38
DatabaseQueue::~DatabaseQueue
()
39
{
40
close
();
41
}
42
43
void
DatabaseQueue::enqueue
(
SQLOperation
* operation)
44
{
45
if
(!operation)
46
return
;
47
48
std::lock_guard<std::mutex> guard(
_impl
->stateLock);
49
if
(
_impl
->closed)
50
return
;
51
52
_impl
->executor.Post(
53
[operation]
54
{
55
operation->
SetConnection
(CurrentDatabaseConnection);
56
operation->
call
();
57
delete
operation;
58
});
59
}
60
61
int
DatabaseQueue::run
(MySQLConnection* connection)
62
{
63
if
(!connection)
64
return
-1;
65
66
BindConnection
(connection);
67
_impl
->executor.Run();
68
ClearConnection
();
69
return
0;
70
}
71
72
void
DatabaseQueue::close
()
73
{
74
std::lock_guard<std::mutex> guard(
_impl
->stateLock);
75
if
(
_impl
->closed)
76
return
;
77
78
_impl
->closed =
true
;
79
_impl
->executor.ResetWork();
80
}
81
82
void
DatabaseQueue::wait
()
83
{
84
std::shared_ptr<std::promise<void> > barrier(
new
std::promise<void>());
85
std::future<void> ready = barrier->get_future();
86
87
{
88
std::lock_guard<std::mutex> guard(
_impl
->stateLock);
89
if
(
_impl
->closed)
90
return
;
91
92
_impl
->executor.Post(
93
[barrier]
94
{
95
barrier->set_value();
96
});
97
}
98
99
ready.wait();
100
}
101
102
Asio::IoContextExecutor
&
DatabaseQueue::GetExecutor
()
103
{
104
return
_impl
->executor;
105
}
106
107
void
DatabaseQueue::BindConnection
(MySQLConnection* connection)
108
{
109
CurrentDatabaseConnection = connection;
110
}
111
112
void
DatabaseQueue::ClearConnection
()
113
{
114
CurrentDatabaseConnection =
nullptr
;
115
}
116
}
BoostAsioExecutor.h
DatabaseQueue.h
SQLOperation.h
SQLOperation
Definition
SQLOperation.h:45
SQLOperation::SetConnection
virtual void SetConnection(MySQLConnection *con)
Definition
SQLOperation.h:54
SQLOperation::call
virtual int call()
Definition
SQLOperation.h:48
Skyfire::Asio::IoContextExecutor
Definition
BoostAsioExecutor.h:23
Skyfire::DatabaseQueue::_impl
std::unique_ptr< Impl > _impl
Definition
DatabaseQueue.h:36
Skyfire::DatabaseQueue::~DatabaseQueue
~DatabaseQueue()
Definition
DatabaseQueue.cpp:38
Skyfire::DatabaseQueue::close
void close()
Definition
DatabaseQueue.cpp:72
Skyfire::DatabaseQueue::BindConnection
void BindConnection(MySQLConnection *connection)
Definition
DatabaseQueue.cpp:107
Skyfire::DatabaseQueue::enqueue
void enqueue(SQLOperation *operation)
Definition
DatabaseQueue.cpp:43
Skyfire::DatabaseQueue::GetExecutor
Asio::IoContextExecutor & GetExecutor()
Definition
DatabaseQueue.cpp:102
Skyfire::DatabaseQueue::DatabaseQueue
DatabaseQueue()
Definition
DatabaseQueue.cpp:33
Skyfire::DatabaseQueue::ClearConnection
void ClearConnection()
Definition
DatabaseQueue.cpp:112
Skyfire::DatabaseQueue::run
int run(MySQLConnection *connection)
Definition
DatabaseQueue.cpp:61
Skyfire::DatabaseQueue::wait
void wait()
Definition
DatabaseQueue.cpp:82
Skyfire
Definition
AuthPatchTransfer.h:12
Skyfire::DatabaseQueue::Impl
Definition
DatabaseQueue.cpp:21
Skyfire::DatabaseQueue::Impl::Impl
Impl()
Definition
DatabaseQueue.cpp:22
Skyfire::DatabaseQueue::Impl::executor
Skyfire::Asio::IoContextExecutor executor
Definition
DatabaseQueue.cpp:28
Skyfire::DatabaseQueue::Impl::stateLock
std::mutex stateLock
Definition
DatabaseQueue.cpp:29
Skyfire::DatabaseQueue::Impl::closed
bool closed
Definition
DatabaseQueue.cpp:30
src
server
shared
Database
DatabaseQueue.cpp
Generated on
for Project SkyFire Core by
1.17.0