/********************************************************************* * 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 BufferWorker : public AsyncWorker { public: BufferWorker( Callback *callback , int milliseconds , v8::Local &bufferHandle ) : AsyncWorker(callback), milliseconds(milliseconds) { SaveToPersistent("buffer", bufferHandle); SaveToPersistent(New("puffer").ToLocalChecked(), bufferHandle); SaveToPersistent(0u, bufferHandle); } ~BufferWorker() {} void Execute () { Sleep(milliseconds); } void HandleOKCallback () { HandleScope scope; v8::Local handle = GetFromPersistent("buffer"); callback->Call(1, &handle, async_resource); handle = GetFromPersistent(New("puffer").ToLocalChecked()); callback->Call(1, &handle, async_resource); handle = GetFromPersistent(0u); callback->Call(1, &handle, async_resource); } private: int milliseconds; }; NAN_METHOD(DoSleep) { v8::Local bufferHandle = To(info[1]).ToLocalChecked(); Callback *callback = new Callback(To(info[2]).ToLocalChecked()); assert(!callback->IsEmpty() && "Callback should not be empty"); AsyncQueueWorker(new BufferWorker( callback , To(info[0]).FromJust() , bufferHandle)); } NAN_MODULE_INIT(Init) { Set(target , New("a").ToLocalChecked() , GetFunction(New(DoSleep)).ToLocalChecked()); } NODE_MODULE(bufferworkerpersistent, Init)