From d9f0e6a0aad8e5873de909a60c0ca19a4bcbee49 Mon Sep 17 00:00:00 2001 From: Blue Date: Sat, 16 Sep 2023 15:22:34 +0200 Subject: [PATCH] server: add cloudid to connectioninfo --- server/src/bindings/ConnectionInfo.cpp | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/server/src/bindings/ConnectionInfo.cpp b/server/src/bindings/ConnectionInfo.cpp index 3ba5332b..140d155d 100644 --- a/server/src/bindings/ConnectionInfo.cpp +++ b/server/src/bindings/ConnectionInfo.cpp @@ -175,6 +175,40 @@ static void SetText(v8::Local, v8::Local val, const v8::P con->SetText(text); } +static void RequestCloudID(const v8::FunctionCallbackInfo& info) +{ + static std::list> promises; + + V8_GET_ISOLATE_CONTEXT_RESOURCE(); + V8_GET_THIS_BASE_OBJECT(con, alt::IConnectionInfo); + + auto& persistent = promises.emplace_back(v8::Global(isolate, v8::Promise::Resolver::New(ctx).ToLocalChecked())); + + con->RequestCloudID( + [&persistent, resource](bool ok, const std::string& result) + { + resource->RunOnNextTick( + [=, &persistent]() + { + if(!resource->GetResource()->IsStarted()) + { + promises.remove(persistent); + return; + } + + auto isolate = resource->GetIsolate(); + auto context = resource->GetContext(); + + if(ok) persistent.Get(isolate)->Resolve(context, V8Helpers::JSValue(result)); + else + persistent.Get(isolate)->Reject(context, v8::Exception::Error(V8Helpers::JSValue(result))); + promises.remove(persistent); + }); + }); + + V8_RETURN(persistent.Get(isolate)->GetPromise()); +} + extern V8Class v8BaseObject; extern V8Class v8ConnectionInfo("ConnectionInfo", v8BaseObject, @@ -190,6 +224,7 @@ extern V8Class v8ConnectionInfo("ConnectionInfo", V8Helpers::SetMethod(isolate, tpl, "accept", &Accept); V8Helpers::SetMethod(isolate, tpl, "decline", &Decline); + V8Helpers::SetMethod(isolate, tpl, "requestCloudID", &RequestCloudID); V8Helpers::SetAccessor(isolate, tpl, "isAccepted", &IsAcceptedGetter); V8Helpers::SetAccessor(isolate, tpl, "name", &NameGetter);