Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <node.h>
- #include "myobject.h"
- v8::Persistent<v8::Function> MyObject::constructor;
- MyObject::MyObject()
- {
- }
- MyObject::~MyObject()
- {
- }
- void MyObject::Init(v8::Handle<v8::Object> exports)
- {
- // Prepare constructor template
- v8::Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(New);
- tpl->SetClassName(v8::String::NewSymbol(OBJECT_NAME));
- tpl->InstanceTemplate()->SetInternalFieldCount(1);
- // Prototype
- tpl->PrototypeTemplate()->Set(v8::String::NewSymbol("start_lib"), v8::FunctionTemplate::New(Start_Lib)->GetFunction());
- tpl->PrototypeTemplate()->Set(v8::String::NewSymbol("stop_lib"), v8::FunctionTemplate::New(Stop_Lib)->GetFunction());
- constructor = v8::Persistent<v8::Function>::New(tpl->GetFunction());
- exports->Set(v8::String::NewSymbol(OBJECT_NAME), constructor);
- }
- v8::Handle<v8::Value> MyObject::New(const v8::Arguments& args) {
- v8::HandleScope scope;
- if (args.IsConstructCall())
- {
- // Invoked as constructor: `new MyObject(...)`
- MyObject* obj = new MyObject();
- obj->Wrap(args.This());
- return scope.Close(args.This());
- }
- else
- {
- // Invoked as plain function `MyObject(...)`, turn into construct call.
- const int argc = 1;
- v8::Local<v8::Value> argv[argc] = { args[0] };
- return scope.Close(constructor->NewInstance(argc, argv));
- }
- }
- v8::Handle<v8::Value> MyObject::Stop_Lib(const v8::Arguments& args)
- {
- v8::HandleScope scope;
- MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());
- obj->lib.Stop_Lib();
- return scope.Close(v8::Undefined());
- }
- v8::Handle<v8::Value> MyObject::Start_Lib(const v8::Arguments& args)
- {
- v8::HandleScope scope;
- MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.This());
- if (args.Length() < 1)
- {
- v8::ThrowException(v8::Exception::TypeError(v8::String::New("Wrong number of arguments")));
- return scope.Close(v8::Undefined());
- }
- if (args[0]->IsNumber())
- {
- v8::ThrowException(v8::Exception::TypeError(v8::String::New("Wrong argument type")));
- return scope.Close(v8::Undefined());
- }
- std::string param1(*v8::String::Utf8Value(args[0]->ToString()));
- obj->lib.Start_Lib(param1.c_str());
- return scope.Close(v8::Undefined());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement