-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmanger.hpp
85 lines (80 loc) · 2.53 KB
/
manger.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
#pragma once
#include "jsonrpc.hpp"
#include "modules/net/con.hpp"
#include "ntvpref.hpp"
#include "taskmgr.hpp"
class RPCServer : rpc::BaseJsonRpcHandler {
protected:
void OnNewConnection(scoped_refptr<net::Conn> con);
struct tcp_worker_thread_paramters {
RPCServer* pServer;
scoped_refptr<net::Conn> con;
tcp_worker_thread_paramters(RPCServer* p, scoped_refptr<net::Conn> con)
: pServer(p), con(con) {}
};
static void tcp_worker_thread(void* p) {
tcp_worker_thread_paramters* arg = (tcp_worker_thread_paramters*)p;
arg->pServer->OnNewConnection(arg->con);
delete arg;
}
public:
void AsyncNewConnection(scoped_refptr<net::Conn> con);
RPCServer(Value& pref, ScriptLoader* Loader)
: mTasks(), mLock(), mPref(pref), mLoader(Loader) {}
~RPCServer() {
mLock.lock();
for (auto iter : mTasks) {
iter.second->Stop();
}
for (auto iter : mTasks) {
iter.second->Join();
delete iter.second;
}
mLock.unlock();
}
protected:
Value BeginTask(Value& host, Value& port, Value& filter, Value& taskID);
Value StopTask(Value& taskID);
Value CleanTask(Value& taskID);
Value GetTaskStatus(Value& taskID);
Value EnumTask();
Value GetDiscoverdHost(Value& taskID);
Value GetFinishedHost(Value& taskID);
Value GetHostTaskInformation(Value& taskID, Value& host);
Value StopHostTask(Value& taskID, Value& host);
Value GetEngineVersion();
BEGIN_REQUEST_MAP()
ADD_HANDLE(GetEngineVersion)
ADD_HANDLE(EnumTask)
ADD_HANDLE4(BeginTask)
ADD_HANDLE1(StopTask)
ADD_HANDLE1(CleanTask)
ADD_HANDLE1(GetTaskStatus)
ADD_HANDLE1(GetDiscoverdHost)
ADD_HANDLE1(GetFinishedHost)
ADD_HANDLE2(GetHostTaskInformation)
ADD_HANDLE2(StopHostTask)
END_REQUEST_MAP()
protected:
Value mPref;
std::mutex mLock;
ScriptLoader* mLoader;
std::map<std::string, HostsTask*> mTasks;
HostsTask* LookupTask(std::string taskID) {
HostsTask* ptr = NULL;
mLock.lock();
auto iter = mTasks.find(taskID);
if (iter != mTasks.end()) {
ptr = iter->second;
}
mLock.unlock();
return ptr;
}
void AddTask(std::string taskID, HostsTask* task) {
mLock.lock();
mTasks[taskID] = task;
mLock.unlock();
}
void LoadOidList(std::string filter, std::list<std::string>& result);
};
void ServeTCP(RPCServer* srv, std::string port, std::string host = "localhost");