-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathThreadHandler.hpp
98 lines (65 loc) · 2.09 KB
/
ThreadHandler.hpp
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
88
89
90
91
92
93
94
95
96
97
98
#ifndef ThreadHandler_hpp
#define ThreadHandler_hpp
#include "Debug.cpp"
#include <sys/time.h>
#include <sys/sendfile.h>
#include <unordered_map>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>
#include <thread>
#include "./lib/http/httpparser.hpp"
#include "Helper.hpp"
#include "Global.hpp"
#include "Configuration.hpp"
using namespace std;
typedef thread ClientPThread_t;
typedef uint16_t PocessRequestsIndex_t;
typedef vector<RequestProps_t> ClientRequestDataVec_t;
typedef unordered_map<ClientFD_t, ClientRequestDataVec_t> ClientRequestDataList_t;
typedef pair<ClientFD_t, ClientRequestDataVec_t> ClientRequestDataListPair_t;
typedef vector<ClientRequestDataListPair_t> ClientRequestDataListVector_t;
typedef unordered_map<ClientFD_t, PocessRequestsIndex_t> ProcessRequestsIndexList_t;
typedef pair<ClientFD_t, PocessRequestsIndex_t> ProcessRequestsIndexListPair_t;
typedef struct {
pidfd_t ParentPidFD;
Namespaces_t Namespaces;
} ThreadHandlerGlobals_t;
class ClientThread: private HTTPParser, private SHMPythonAS
{
public:
ClientThread(
ClientFD_t, Namespaces_t&, ClientRequestDataVec_t
);
~ClientThread();
void startThread();
void processRequests();
bool join();
private:
ClientPThread_t _ThreadRef;
ClientFD_t _ClientFD;
ClientFD_t _ClientFDShared;
Namespaces_t& _Namespaces;
ClientRequestDataVec_t _ClientRequests;
};
typedef const std::shared_ptr<ClientThread> ClientThreadObjRef_t;
typedef pair<const ClientFD_t, const ClientThreadObjRef_t> ClientListPair_t;
typedef unordered_map<ClientFD_t, const ClientThreadObjRef_t> ClientThreads_t;
class ThreadHandler
{
public:
ThreadHandler();
~ThreadHandler();
protected:
void _setGlobalData(pidfd_t, Namespaces_t);
void _addRequests(ClientRequestDataVec_t);
void _processThreads();
void _checkProcessed();
ThreadHandlerGlobals_t _Globals;
ClientRequestDataList_t _RequestsSorted;
ClientRequestDataListVector_t _ProcessRequests;
ProcessRequestsIndexList_t _ProcessRequestsIndex;
ClientThreads_t _ClientThreads;
};
#endif