2
2
3
3
#include < chrono>
4
4
#include < condition_variable>
5
+ #include < iostream>
5
6
#include < mutex>
6
7
#include < thread>
7
8
@@ -15,6 +16,157 @@ struct ProgressData {
15
16
size_t progress;
16
17
};
17
18
19
+ class TestWorkerWithNoCb : public AsyncProgressWorker <ProgressData> {
20
+ public:
21
+ static void DoWork (const CallbackInfo& info) {
22
+ switch (info.Length ()) {
23
+ case 1 : {
24
+ Function cb = info[0 ].As <Function>();
25
+ TestWorkerWithNoCb* worker = new TestWorkerWithNoCb (info.Env (), cb);
26
+ worker->Queue ();
27
+ } break ;
28
+
29
+ case 2 : {
30
+ std::string resName = info[0 ].As <String>();
31
+ Function cb = info[1 ].As <Function>();
32
+ TestWorkerWithNoCb* worker =
33
+ new TestWorkerWithNoCb (info.Env (), resName.c_str (), cb);
34
+ worker->Queue ();
35
+ } break ;
36
+
37
+ case 3 : {
38
+ std::string resName = info[0 ].As <String>();
39
+ Object resObject = info[1 ].As <Object>();
40
+ Function cb = info[2 ].As <Function>();
41
+ TestWorkerWithNoCb* worker =
42
+ new TestWorkerWithNoCb (info.Env (), resName.c_str (), resObject, cb);
43
+ worker->Queue ();
44
+ } break ;
45
+
46
+ default :
47
+
48
+ break ;
49
+ }
50
+ }
51
+
52
+ protected:
53
+ void Execute (const ExecutionProgress& progress) override {
54
+ ProgressData data{1 };
55
+ progress.Send (&data, 1 );
56
+ }
57
+
58
+ void OnProgress (const ProgressData*, size_t /* count */ ) override {
59
+ _cb.Call ({});
60
+ }
61
+
62
+ private:
63
+ TestWorkerWithNoCb (Napi::Env env, Function cb) : AsyncProgressWorker(env) {
64
+ _cb.Reset (cb, 1 );
65
+ }
66
+ TestWorkerWithNoCb (Napi::Env env, const char * resourceName, Function cb)
67
+ : AsyncProgressWorker(env, resourceName) {
68
+ _cb.Reset (cb, 1 );
69
+ }
70
+ TestWorkerWithNoCb (Napi::Env env,
71
+ const char * resourceName,
72
+ const Object& resourceObject,
73
+ Function cb)
74
+ : AsyncProgressWorker(env, resourceName, resourceObject) {
75
+ _cb.Reset (cb, 1 );
76
+ }
77
+ FunctionReference _cb;
78
+ };
79
+
80
+ class TestWorkerWithRecv : public AsyncProgressWorker <ProgressData> {
81
+ public:
82
+ static void DoWork (const CallbackInfo& info) {
83
+ switch (info.Length ()) {
84
+ case 2 : {
85
+ Object recv = info[0 ].As <Object>();
86
+ Function cb = info[1 ].As <Function>();
87
+ TestWorkerWithRecv* worker = new TestWorkerWithRecv (recv, cb);
88
+ worker->Queue ();
89
+ } break ;
90
+
91
+ case 3 : {
92
+ Object recv = info[0 ].As <Object>();
93
+ Function cb = info[1 ].As <Function>();
94
+ std::string resName = info[2 ].As <String>();
95
+ TestWorkerWithRecv* worker =
96
+ new TestWorkerWithRecv (recv, cb, resName.c_str ());
97
+ worker->Queue ();
98
+ } break ;
99
+
100
+ case 4 : {
101
+ Object recv = info[0 ].As <Object>();
102
+ Function cb = info[1 ].As <Function>();
103
+ std::string resName = info[2 ].As <String>();
104
+ Object resObject = info[3 ].As <Object>();
105
+ TestWorkerWithRecv* worker =
106
+ new TestWorkerWithRecv (recv, cb, resName.c_str (), resObject);
107
+ worker->Queue ();
108
+ } break ;
109
+
110
+ default :
111
+
112
+ break ;
113
+ }
114
+ }
115
+
116
+ protected:
117
+ void Execute (const ExecutionProgress&) override {}
118
+
119
+ void OnProgress (const ProgressData*, size_t /* count */ ) override {}
120
+
121
+ private:
122
+ TestWorkerWithRecv (const Object& recv, const Function& cb)
123
+ : AsyncProgressWorker(recv, cb) {}
124
+ TestWorkerWithRecv (const Object& recv,
125
+ const Function& cb,
126
+ const char * resourceName)
127
+ : AsyncProgressWorker(recv, cb, resourceName) {}
128
+ TestWorkerWithRecv (const Object& recv,
129
+ const Function& cb,
130
+ const char * resourceName,
131
+ const Object& resourceObject)
132
+ : AsyncProgressWorker(recv, cb, resourceName, resourceObject) {}
133
+ };
134
+
135
+ class TestWorkerWithCb : public AsyncProgressWorker <ProgressData> {
136
+ public:
137
+ static void DoWork (const CallbackInfo& info) {
138
+ switch (info.Length ()) {
139
+ case 1 : {
140
+ Function cb = info[0 ].As <Function>();
141
+ TestWorkerWithCb* worker = new TestWorkerWithCb (cb);
142
+ worker->Queue ();
143
+ } break ;
144
+
145
+ case 2 : {
146
+ Function cb = info[0 ].As <Function>();
147
+ std::string asyncResName = info[1 ].As <String>();
148
+ TestWorkerWithCb* worker =
149
+ new TestWorkerWithCb (cb, asyncResName.c_str ());
150
+ worker->Queue ();
151
+ } break ;
152
+
153
+ default :
154
+
155
+ break ;
156
+ }
157
+ }
158
+
159
+ protected:
160
+ void Execute (const ExecutionProgress&) override {}
161
+
162
+ void OnProgress (const ProgressData*, size_t /* count */ ) override {}
163
+
164
+ private:
165
+ TestWorkerWithCb (Function cb) : AsyncProgressWorker(cb) {}
166
+ TestWorkerWithCb (Function cb, const char * res_name)
167
+ : AsyncProgressWorker(cb, res_name) {}
168
+ };
169
+
18
170
class TestWorker : public AsyncProgressWorker <ProgressData> {
19
171
public:
20
172
static void DoWork (const CallbackInfo& info) {
@@ -196,6 +348,9 @@ Object InitAsyncProgressWorker(Env env) {
196
348
exports[" doMalignTest" ] = Function::New (env, MalignWorker::DoWork);
197
349
exports[" doSignalAfterProgressTest" ] =
198
350
Function::New (env, SignalAfterProgressTestWorker::DoWork);
351
+ exports[" runWorkerNoCb" ] = Function::New (env, TestWorkerWithNoCb::DoWork);
352
+ exports[" runWorkerWithRecv" ] = Function::New (env, TestWorkerWithRecv::DoWork);
353
+ exports[" runWorkerWithCb" ] = Function::New (env, TestWorkerWithCb::DoWork);
199
354
return exports;
200
355
}
201
356
0 commit comments