initial node garbage

This commit is contained in:
Jeff 2018-11-18 12:00:51 -05:00
parent 930b41f644
commit ff6ab7d631
4 changed files with 91 additions and 0 deletions

15
contrib/node/binding.gyp Normal file
View File

@ -0,0 +1,15 @@
{
"targets": [
{
"target_name": "lokinet",
"cflags!": [ "-fno-exceptions" ],
"cflags_cc!": [ "-fno-exceptions" ],
"sources": [ "lokinet.cc" ],
"include_dirs": [
"<!@(node -p \"require('node-addon-api').include\")"
],
'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
}
]
}

62
contrib/node/lokinet.cc Normal file
View File

@ -0,0 +1,62 @@
#include <napi.h>
#include <llarp.hpp>
struct Lokinet : public Napi::ObjectWrap< Lokinet >
{
llarp::Context ctx;
static Napi::Object
Init(Napi::Env env, Napi::Object exports)
{
Napi::HandleScope scope(env);
Napi::Function func =
DefineClass(env, "Lokinet",
{InstanceMethod("configure", &Lokinet::Configure),
InstanceMethod("run", &Lokient::Run),
InstanceMethod("kill", &Lokinet::Kill)});
constructor = Napi::Persistent(func);
constructor.SuppressDestruct();
exports.Set("Lokinet", func);
return exports;
};
Napi::Value
Configure(const Napi::CallbackInfo& info)
{
if(info.Length() != 1 || !info[0].IsString())
{
Napi::TypeError::New(env, "String expected").ThrowAsJavaScriptException();
}
bool result = ctx.LoadConfig(info[0].As< std::string >());
if(result)
{
result &= ctx.Setup() == 0;
}
return Napi::Value(info.Env(), result);
}
Napi::Value
Run(const Napi::CallbackInfo& info)
{
bool result = ctx.Run() == 0;
return Napi::Value(info.Env(), result);
}
Napi::Value
Kill(const Napi::CallbackInfo& info)
{
bool result = ctx.Stop();
return Napi::Value(info.Env(), result);
}
};
Napi::Object
InitAll(Napi::Env env, Napi::Object exports)
{
return Lokinet::Init(env, exports);
}
NODE_API_MODULE(addon, InitAll)

2
contrib/node/lokinet.js Normal file
View File

@ -0,0 +1,2 @@
var lokinet = require("bindings")("lokinet");
console.log(lokinet);

12
contrib/node/package.json Normal file
View File

@ -0,0 +1,12 @@
{
"name": "lokinet",
"version": "0.0.0",
"description": "lokinet god awful node binding",
"main": "lokinet.js",
"private": true,
"gypfile": true,
"dependencies": {
"bindings": "~1.2.1",
"node-addon-api": "^1.0.0"
}
}