-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDbWorker.h
47 lines (42 loc) · 1.21 KB
/
DbWorker.h
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
//
// Created by origin on 30.10.16.
//
#ifndef MONGODB_ASYNC_DBWORKER_H
#define MONGODB_ASYNC_DBWORKER_H
#include "BaseHeader.h"
#include "ConcurrentQueue.h"
#include "GenericDbTask.h"
#include "TaskExecutor.h"
class DbWorker: public std::enable_shared_from_this<DbWorker> {
ConcurrentQueue<GenericDbTask>& mTasks;
bool mStopFlag = false;
TaskExecutor* mTaskExecutor;
void mTaskLoop() {
auto destroyProtector = shared_from_this();
while(!mStopFlag) {
GenericDbTask t = mTasks.pop();
boost::apply_visitor(*mTaskExecutor, t.task);
}
}
mongocxx::database mDb;
mongocxx::client mClient;
public:
DbWorker&operator=(const DbWorker& oth) = delete;
DbWorker(ConcurrentQueue<GenericDbTask>& _tasks, const mongocxx::uri _uri, string db): mDb(), mClient(_uri), mTasks(_tasks) {
mDb = mClient[db];
mTaskExecutor = new TaskExecutor(mClient, mDb);
}
void start() {
thread(&DbWorker::mTaskLoop, this).detach();
}
void pushTask (GenericDbTask task) {
mTasks.push(task);
}
void shutdown() {
mStopFlag = true;
}
~DbWorker() {
delete mTaskExecutor;
}
};
#endif //MONGODB_ASYNC_DBWORKER_H