addon-tools-el/examples/node-addon/cpp/example.cpp

84 lines
1.4 KiB
C++

#include <cstdlib>
#include <iostream>
#include "example.hpp"
using namespace v8;
using namespace node;
using namespace std;
#define THIS_EXAMPLE \
Example *example = ObjectWrap::Unwrap<Example>(info.This());
#define THIS_CHECK \
if (example->_isDestroyed) return;
Nan::Persistent<v8::Function> Example::_constructor;
void Example::init(Handle<Object> target) {
Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(newCtor);
ctor->InstanceTemplate()->SetInternalFieldCount(1);
ctor->SetClassName(JS_STR("Example"));
// prototype
Nan::SetPrototypeMethod(ctor, "destroy", destroy);
Local<ObjectTemplate> proto = ctor->PrototypeTemplate();
// ACCESSOR_RW(proto, prop);
EventEmitter::extend(ctor, proto);
_constructor.Reset(Nan::GetFunction(ctor).ToLocalChecked());
Nan::Set(target, JS_STR("Example"), Nan::GetFunction(ctor).ToLocalChecked());
}
NAN_METHOD(Example::newCtor) {
CTOR_CHECK("Example");
Example *example = new Example();
example->Wrap(info.This());
RET_VALUE(info.This());
}
Example::Example() {
_isDestroyed = false;
}
Example::~Example() {
_destroy();
}
void Example::_destroy() { DES_CHECK;
_isDestroyed = true;
emit("destroy");
}
NAN_METHOD(Example::destroy) { THIS_EXAMPLE; THIS_CHECK;
example->_destroy();
}