From ff6ab7d63149c5710e3fba4b69ed67d817b17b59 Mon Sep 17 00:00:00 2001 From: Jeff Date: Sun, 18 Nov 2018 12:00:51 -0500 Subject: [PATCH] initial node garbage --- contrib/node/binding.gyp | 15 ++++++++++ contrib/node/lokinet.cc | 62 +++++++++++++++++++++++++++++++++++++++ contrib/node/lokinet.js | 2 ++ contrib/node/package.json | 12 ++++++++ 4 files changed, 91 insertions(+) create mode 100644 contrib/node/binding.gyp create mode 100644 contrib/node/lokinet.cc create mode 100644 contrib/node/lokinet.js create mode 100644 contrib/node/package.json diff --git a/contrib/node/binding.gyp b/contrib/node/binding.gyp new file mode 100644 index 000000000..ea65612e8 --- /dev/null +++ b/contrib/node/binding.gyp @@ -0,0 +1,15 @@ + +{ + "targets": [ + { + "target_name": "lokinet", + "cflags!": [ "-fno-exceptions" ], + "cflags_cc!": [ "-fno-exceptions" ], + "sources": [ "lokinet.cc" ], + "include_dirs": [ + " +#include + +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) \ No newline at end of file diff --git a/contrib/node/lokinet.js b/contrib/node/lokinet.js new file mode 100644 index 000000000..02ab71019 --- /dev/null +++ b/contrib/node/lokinet.js @@ -0,0 +1,2 @@ +var lokinet = require("bindings")("lokinet"); +console.log(lokinet); \ No newline at end of file diff --git a/contrib/node/package.json b/contrib/node/package.json new file mode 100644 index 000000000..bdf30c57c --- /dev/null +++ b/contrib/node/package.json @@ -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" + } +} \ No newline at end of file