/*********************************************************************
* NAN - Native Abstractions for Node.js
*
* Copyright (c) 2018 NAN contributors
*
* MIT License
********************************************************************/
#include
#include "sleep.h" // NOLINT(build/include_subdir)
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)