diff --git a/bin/nodejs/callback.h b/bin/nodejs/callback.h index 657b15ab6e7097991ec698ea8b9271d0bf95d497..c1da6535c28bb51ef5b60f40ae47dc849faa33e3 100644 --- a/bin/nodejs/callback.h +++ b/bin/nodejs/callback.h @@ -23,8 +23,10 @@ Persistent<Function> nameRegistrationEndedCb; Persistent<Function> knownDevicesChangedCb; Persistent<Function> registeredNameFoundCb; Persistent<Function> callStateChangedCb; +Persistent<Function> mediaChangeRequestedCb; Persistent<Function> incomingMessageCb; Persistent<Function> incomingCallCb; +Persistent<Function> incomingCallWithMediaCb; Persistent<Function> conversationLoadedCb; Persistent<Function> messageReceivedCb; Persistent<Function> conversationRequestReceivedCb; @@ -73,10 +75,14 @@ getPresistentCb(std::string_view signal) return ®isteredNameFoundCb; else if (signal == "CallStateChanged") return &callStateChangedCb; + else if (signal == "MediaChangeRequested") + return &mediaChangeRequestedCb; else if (signal == "IncomingMessage") return &incomingMessageCb; else if (signal == "IncomingCall") return &incomingCallCb; + else if (signal == "IncomingCallWithMedia") + return &incomingCallWithMediaCb; else if (signal == "ConversationLoaded") return &conversationLoadedCb; else if (signal == "MessageReceived") @@ -342,7 +348,12 @@ accountMessageStatusChanged(const std::string& account_id, Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), accountMessageStatusChangedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW_UNS(message_id), V8_STRING_NEW_LOCAL(to), SWIGV8_INTEGER_NEW(state)}; + Local<Value> callback_args[] = { + V8_STRING_NEW_LOCAL(account_id), + V8_STRING_NEW_LOCAL(message_id), + V8_STRING_NEW_LOCAL(peer), + SWIGV8_INTEGER_NEW(state) + }; func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); @@ -408,7 +419,31 @@ callStateChanged(const std::string& callId, const std::string& state, int detail pendingSignals.emplace([callId, state, detail_code]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), callStateChangedCb); if (!func.IsEmpty()) { - SWIGV8_VALUE callback_args[] = {V8_STRING_NEW_LOCAL(callId), V8_STRING_NEW_LOCAL(state), SWIGV8_INTEGER_NEW(detail_code)}; + SWIGV8_VALUE callback_args[] = { + V8_STRING_NEW_LOCAL(callId), + V8_STRING_NEW_LOCAL(state), + SWIGV8_INTEGER_NEW(detail_code) + }; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); + } + }); + + uv_async_send(&signalAsync); +} + +void +mediaChangeRequested(const std::string& accountId, const std::string& callId, + const std::vector<std::map<std::string, std::string>>& mediaList) +{ + std::lock_guard<std::mutex> lock(pendingSignalsLock); + pendingSignals.emplace([accountId, callId, mediaList]() { + Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), mediaChangeRequestedCb); + if (!func.IsEmpty()) { + SWIGV8_VALUE callback_args[] = { + V8_STRING_NEW_LOCAL(accountId), + V8_STRING_NEW_LOCAL(callId), + stringMapVecToJsMapArray(mediaList) + }; func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -456,6 +491,27 @@ incomingCall(const std::string& accountId, const std::string& callId, const std: uv_async_send(&signalAsync); } + +void +incomingCallWithMedia(const std::string& accountId, const std::string& callId, const std::string& from, const std::vector<std::map<std::string, std::string>>& mediaList) +{ + std::lock_guard<std::mutex> lock(pendingSignalsLock); + pendingSignals.emplace([accountId, callId, from, mediaList]() { + Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), incomingCallWithMediaCb); + if (!func.IsEmpty()) { + SWIGV8_VALUE callback_args[] = { + V8_STRING_NEW_LOCAL(accountId), + V8_STRING_NEW_LOCAL(callId), + V8_STRING_NEW_LOCAL(from), + stringMapVecToJsMapArray(mediaList) + }; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); + } + }); + + uv_async_send(&signalAsync); +} + /** Conversations */ void diff --git a/bin/nodejs/nodejs_interface.i b/bin/nodejs/nodejs_interface.i index fa7d1b97f3c83d69c4adf902dd6080743545b2a5..d64d875ee7e0f50b19813fcabc3827fd0318c383 100644 --- a/bin/nodejs/nodejs_interface.i +++ b/bin/nodejs/nodejs_interface.i @@ -124,7 +124,7 @@ void init(const SWIGV8_VALUE& funcMap){ exportable_callback<CallSignal::IncomingMessage>(bind(&incomingMessage, _1, _2, _3)), exportable_callback<CallSignal::IncomingCall>(bind(&incomingCall, _1, _2, _3)), exportable_callback<CallSignal::IncomingCallWithMedia>(bind(&incomingCallWithMedia, _1, _2, _3, _4)), - exportable_callback<CallSignal::MediaChangeRequested>(bind(&mediaChangeRequested, _1, _2, _3) + exportable_callback<CallSignal::MediaChangeRequested>(bind(&mediaChangeRequested, _1, _2, _3)) }; const std::map<std::string, SharedCallback> configEvHandlers = { @@ -140,8 +140,8 @@ void init(const SWIGV8_VALUE& funcMap){ exportable_callback<ConfigurationSignal::KnownDevicesChanged>(bind(&knownDevicesChanged, _1, _2 )), exportable_callback<ConfigurationSignal::IncomingAccountMessage>(bind(&incomingAccountMessage, _1, _2, _3, _4 )), exportable_callback<ConfigurationSignal::AccountMessageStatusChanged>(bind(&accountMessageStatusChanged, _1, _2, _3, _4, _5 )), - exportable_callback<ConfigurationSignal::ProfileReceived>(bind(&profileReceived, _1, _2, _3, _4 )), - exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )), + //exportable_callback<ConfigurationSignal::ProfileReceived>(bind(&profileReceived, _1, _2, _3, _4 )), + //exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )), }; const std::map<std::string, SharedCallback> conversationHandlers = {