/********************************************************************* * NAN - Native Abstractions for Node.js * * Copyright (c) 2018 NAN contributors * * MIT License ********************************************************************/ #include #include "sleep.h" // NOLINT(build/include) using namespace Nan; // NOLINT(build/namespaces) class ProgressWorker : public AsyncProgressWorker { public: ProgressWorker( Callback *callback , Callback *progress , int milliseconds , int iters) : AsyncProgressWorker(callback), progress(progress) , milliseconds(milliseconds), iters(iters) {} ~ProgressWorker() { delete progress; } void Execute (const AsyncProgressWorker::ExecutionProgress& progress) { for (int i = 0; i < iters; ++i) { progress.Send(reinterpret_cast(&i), sizeof(int)); Sleep(milliseconds); } } void HandleProgressCallback(const char *data, size_t count) { HandleScope scope; v8::Local argv[] = { New(*reinterpret_cast(const_cast(data))) }; progress->Call(1, argv, async_resource); } private: Callback *progress; int milliseconds; int iters; }; NAN_METHOD(DoProgress) { Callback *progress = new Callback(To(info[2]).ToLocalChecked()); Callback *callback = new Callback(To(info[3]).ToLocalChecked()); AsyncQueueWorker(new ProgressWorker( callback , progress , To(info[0]).FromJust() , To(info[1]).FromJust())); } NAN_MODULE_INIT(Init) { Set(target , New("a").ToLocalChecked() , GetFunction(New(DoProgress)).ToLocalChecked()); } NODE_MODULE(asyncprogressworker, Init)