Commit 080e1e84 authored by jan.koester's avatar jan.koester
Browse files

it compiles

parent d63cd8ee
Loading
Loading
Loading
Loading
Loading
+55 −21
Changes for bindings/nodesjs.cpp: 55 added lines, 21 removed lines.
Original line number Diff line number Diff line
@@ -43,12 +43,12 @@ using v8::Object;
using v8::String;
using v8::Value;

class AuthDBJS : public node::ObjectWrap , Client{
class AuthDBConnectionJS : public node::ObjectWrap , ClientConnections{
public:
    static void Init(v8::Isolate* isolate){
        // Prepare constructor template
        Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(isolate, New);
        tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBJS").ToLocalChecked());
        tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBConnectionJS").ToLocalChecked());
        tpl->InstanceTemplate()->SetInternalFieldCount(1);

        Local<Context> context = isolate->GetCurrentContext();
@@ -63,50 +63,84 @@ public:
        Isolate* isolate = args.GetIsolate();

        const unsigned argc = 1;
        Local<Value> argv[argc] = { args[0] };
        Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor);
        Local<Context> context = isolate->GetCurrentContext();
        Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked();
        Local<Object> instance = cons->NewInstance(context).ToLocalChecked();
        args.GetReturnValue().Set(instance);
    };

private:
    explicit AuthDBJS(double value = 0);
    ~AuthDBJS();
    explicit AuthDBConnectionJS();
    ~AuthDBConnectionJS();

    static void New(const v8::FunctionCallbackInfo<v8::Value>& args){
        AuthDBConnectionJS* obj = new AuthDBConnectionJS();
        obj->Wrap(args.This());
    }

    static v8::Global<v8::Function> constructor;
    friend class AuthDBClientJS;
};

class AuthDBClientJS : public node::ObjectWrap , Client{
public:
    static void Init(v8::Isolate* isolate){
        // Prepare constructor template
        Local<v8::FunctionTemplate> tpl = v8::FunctionTemplate::New(isolate, New);
        tpl->SetClassName(String::NewFromUtf8(isolate, "AuthDBClientJS").ToLocalChecked());
        tpl->InstanceTemplate()->SetInternalFieldCount(1);

        Local<Context> context = isolate->GetCurrentContext();
        constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked());

        node::AddEnvironmentCleanupHook(isolate, [](void*) {
            constructor.Reset();
        }, nullptr);
    }

    static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args){
        Isolate* isolate = args.GetIsolate();

        const unsigned argc = 1;
        Local<Value> argv[argc] = { args[0] };
        Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor);
        Local<Context> context = isolate->GetCurrentContext();
        Local<Object> instance = cons->NewInstance(context, argc, argv).ToLocalChecked();
        args.GetReturnValue().Set(instance);
    };

private:
    explicit AuthDBClientJS(AuthDBConnectionJS &value) : con(value) {

    };
    ~AuthDBClientJS();

        if (args.IsConstructCall()) {
    static void New(const v8::FunctionCallbackInfo<v8::Value>& args){
        Isolate* isolate = args.GetIsolate();
        if (args.IsConstructCall() && args[0]->IsObject() ) {
            // Invoked as constructor: `new MyObject(...)`
            double value = args[0]->IsUndefined() ?
            0 : args[0]->NumberValue(context).FromMaybe(0);
            AuthDBJS* obj = new AuthDBJS(value);
            AuthDBConnectionJS *cons=ObjectWrap::Unwrap<AuthDBConnectionJS>(args[0].As<Object>());
            AuthDBClientJS* obj = new  AuthDBClientJS(*cons);
            obj->Wrap(args.This());
            args.GetReturnValue().Set(args.This());
        } else {
            // Invoked as plain function `MyObject(...)`, turn into construct call.
            const int argc = 1;
            Local<Value> argv[argc] = { args[0] };
            Local<v8::Function> cons = Local<v8::Function>::New(isolate, constructor);
            Local<Object> instance =
            cons->NewInstance(context, argc, argv).ToLocalChecked();
            args.GetReturnValue().Set(instance);
            throw AuthBackendError("no Connection given to Auth::client !");
        }
    }

    static v8::Global<v8::Function> constructor;
    double value_;

    ClientConnections &con;
};

void CreateObject(const FunctionCallbackInfo<Value>& args) {
    AuthDBJS::NewInstance(args);
    AuthDBClientJS::NewInstance(args);
    AuthDBConnectionJS::NewInstance(args);
}

void InitAll(Local<Object> exports) {
  AuthDBJS::Init(exports->GetIsolate());

AuthDBConnectionJS::Init(exports->GetIsolate());
  AuthDBClientJS::Init(exports->GetIsolate());
  NODE_SET_METHOD(exports, "createObject", CreateObject);
}