#include <node.h>
#include <v8.h>
#include <iostream>
using
namespace
v8;
Handle<Value> HandleObjectMethod(
const
Arguments& args) {
HandleScope scope;
if
(!args[0]->IsObject()) {
Local<String> msg = String::New(
"Argument must be Object type"
);
ThrowException(Exception::TypeError(msg));
return
scope.Close(Undefined());
}
Local<Object> obj = Local<Object>::Cast(args[0]);
std::string strOption1 =
""
;
bool
bOption2 =
""
;
{
Local<Value> v = obj->Get(String::New(
"option1"
));
if
(v.IsEmpty() || !v->IsString()) {
Local<String> msg = String::New(
"Option1 is not specified or invalid type"
);
ThrowException(Exception::TypeError(msg));
return
scope.Close(Undefined());
}
else
{
int
length = v->ToString()->Length();
char
c[length];
v->ToString()->WriteAscii(c);
strOption1 += c;
}
}
std::cout <<
"Option1 = "
<< strOption1 << std::endl;
{
Local<Value> v = obj->Get(String::New(
"option2"
));
if
(v.IsEmpty() || !v->IsBoolean()) {
Local<String> msg = String::New(
"Option2 is not specified or invalid type"
);
ThrowException(Exception::TypeError(msg));
return
scope.Close(Undefined());
}
else
{
bOption2 = v->ToBoolean()->Value();
}
}
std::cout <<
"Option2 = "
<< bOption2 << std::endl;
return
scope.Close(Boolean::New(
true
));
}
Handle<Value> HandleArrayMethod(
const
Arguments& args) {
HandleScope scope;
if
(!args[0]->IsArray()) {
Local<String> msg = String::New(
"Argument must be Array type"
);
ThrowException(Exception::TypeError(msg));
return
scope.Close(Undefined());
}
Local<Array> arr = Local<Array>::Cast(args[0]);
int
length = arr->Length();
std::cout <<
"Length:"
<< length << std::endl;
for
(
int
i = 0; i < length; i++) {
Local<Value> v = arr->Get(i);
}
return
scope.Close(v8::Boolean::New(
true
));
}
void
init(Handle<Object> target) {
target->Set(String::NewSymbol(
"giveMeObject"
), FunctionTemplate::New(HandleObjectMethod)->GetFunction());
target->Set(String::NewSymbol(
"giveMeArray"
), FunctionTemplate::New(HandleArrayMethod)->GetFunction());
}
NODE_MODULE(Test1, init)