1 /*********************************************************************
2 * NAN - Native Abstractions for Node.js
3 *
4 * Copyright (c) 2018 NAN contributors
5 *
6 * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
7 ********************************************************************/
8
9 #include <nan.h>
10
11 #include "sleep.h" // NOLINT(build/include)
12
13 using namespace Nan; // NOLINT(build/namespaces)
14
15 class ProgressWorker : public AsyncProgressWorker {
16 public:
ProgressWorker(Callback * callback,Callback * progress,int milliseconds,int iters)17 ProgressWorker(
18 Callback *callback
19 , Callback *progress
20 , int milliseconds
21 , int iters)
22 : AsyncProgressWorker(callback), progress(progress)
23 , milliseconds(milliseconds), iters(iters) {}
24
~ProgressWorker()25 ~ProgressWorker() {
26 delete progress;
27 }
28
Execute(const AsyncProgressWorker::ExecutionProgress & progress)29 void Execute (const AsyncProgressWorker::ExecutionProgress& progress) {
30 for (int i = 0; i < iters; ++i) {
31 progress.Signal();
32 Sleep(milliseconds);
33 }
34 }
35
HandleProgressCallback(const char * data,size_t count)36 void HandleProgressCallback(const char *data, size_t count) {
37 HandleScope scope;
38
39 v8::Local<v8::Value> arg = New<v8::Boolean>(data == NULL && count == 0);
40 progress->Call(1, &arg, async_resource);
41 }
42
43 private:
44 Callback *progress;
45 int milliseconds;
46 int iters;
47 };
48
NAN_METHOD(DoProgress)49 NAN_METHOD(DoProgress) {
50 Callback *progress = new Callback(To<v8::Function>(info[2]).ToLocalChecked());
51 Callback *callback = new Callback(To<v8::Function>(info[3]).ToLocalChecked());
52 AsyncQueueWorker(new ProgressWorker(
53 callback
54 , progress
55 , To<uint32_t>(info[0]).FromJust()
56 , To<uint32_t>(info[1]).FromJust()));
57 }
58
NAN_MODULE_INIT(Init)59 NAN_MODULE_INIT(Init) {
60 Set(target
61 , New<v8::String>("a").ToLocalChecked()
62 , GetFunction(New<v8::FunctionTemplate>(DoProgress)).ToLocalChecked());
63 }
64
65 NODE_MODULE(asyncprogressworkersignal, Init)
66