-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworker.cpp
89 lines (70 loc) · 1.47 KB
/
worker.cpp
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
79
80
81
82
83
84
85
86
87
#include "worker.h"
Worker::Worker()
{
sleep();
}
Worker::~Worker()
{
//delete parsedRequestFactory;
//delete matcher;
}
void Worker::sleep()
{
}
void Worker::run()
{
while(1)
{
std::shared_ptr<Task*> task = taskQueque.waitAndPop();
(*task)->operate(this);
}
}
void Worker::wakeup()
{
}
void Worker::addTask(Task *task)
{
{
std::lock_guard<std::mutex> guard(taskQuequeBlock);
taskQueque.push(task);
}
wakeup();
}
std::shared_ptr<Request> Worker::getRequest(Outputable* output)
{
auto clIdandReq = clientIdToRequest.find(output->getClientId());
if(clIdandReq == clientIdToRequest.end())
{
std::shared_ptr<Request> new_request(new Request_impl(output->getOutputBuffer()));
clientIdToRequest.insert({{output->getClientId(),new_request}});
return new_request;
}
else
{
return (*clIdandReq).second;
}
}
void Worker::deleteRequest(clientId_t clientId)
{
clientIdToRequest.erase(clientId);
}
std::shared_ptr<ParsedRequestFactory> Worker::getParsedRequestFactory()
{
return parsedRequestFactory;
}
std::shared_ptr<Matcher> Worker::getMatcher()
{
return matcher;
}
void Worker::useParsedRequestFactory(ParsedRequestFactory *parsedRequestFactory)
{
this->parsedRequestFactory.reset(parsedRequestFactory);
}
void Worker::useMatcher(Matcher *matcher)
{
this->matcher.reset(matcher);
}
int Worker::getRequestNum()
{
return clientIdToRequest.size();
}