Lines Matching refs:clientContext
37 std::unique_ptr<T> &clientContext)
39 if (clientContext == nullptr) {
40 ENGINE_LOGI("HandleFunc clientContext is null");
43 std::string method = clientContext->method_;
45 napi_value result = clientContext->getNapiParam_(env, info, clientContext);
50 if (!Execute(env, clientContext)) {
59 std::unique_ptr<T> &clientContext)
71 napi_create_reference(env, args[callbackPosition], 1, &clientContext->callbackRef_);
74 napi_create_promise(env, &clientContext->deferred_, &result);
79 static bool Execute(napi_env env, std::unique_ptr<T> &clientContext)
82 napi_create_string_utf8(env, clientContext->method_.c_str(), NAPI_AUTO_LENGTH, &workName);
83 if (napi_create_async_work(env, nullptr, workName, clientContext->executeFunc_, NapiBase::Complete,
84 static_cast<void *>(clientContext.get()), &clientContext->work_) != napi_ok) {
85 ENGINE_LOGE("Failed to create async work for %{public}s", clientContext->method_.c_str());
88 if (napi_queue_async_work_with_qos(env, clientContext->work_, napi_qos_default) != napi_ok) {
89 ENGINE_LOGE("Failed to queue async work for %{public}s", clientContext->method_.c_str());
93 clientContext.release(); // unique_ptr release之后,释放指针的控制权,后续由complete里面释放指针内容
104 T *clientContext = static_cast<T *>(data);
105 if (clientContext == nullptr) {
106 ENGINE_LOGE("Complete clientContext is null");
111 if (clientContext->createValueFunc_ != nullptr) {
113 finalResult = clientContext->createValueFunc_(env, *clientContext);
116 if (clientContext->ipcRequestCode_ != 0) {
118 clientContext->getIpcBusinessError_(clientContext->method_, clientContext->ipcRequestCode_,
119 clientContext->businessError_);
123 bool isSuccess = BuildResult(env, clientContext, finalResult, result);
124 if (clientContext->deferred_) { // promise调用
125 ExecutePromiseFunc(env, clientContext, result, resultLen, isSuccess);
127 ExecuteCallbackFunc(env, clientContext, result, resultLen);
129 napi_delete_async_work(env, clientContext->work_);
130 delete clientContext; // Execute 中释放控制权的指针,在此处释放
131 clientContext = nullptr;
134 static void ExecutePromiseFunc(napi_env env, T *clientContext, napi_value const * result, size_t len,
142 napi_status callbackStatus = isSuccess ? napi_resolve_deferred(env, clientContext->deferred_, result[1]) :
143 napi_reject_deferred(env, clientContext->deferred_, result[0]);
149 static void ExecuteCallbackFunc(napi_env env, T *clientContext, napi_value *result, size_t len)
152 napi_status resultStatus = napi_get_reference_value(env, clientContext->callbackRef_, &callback);
163 resultStatus = napi_delete_reference(env, clientContext->callbackRef_);
169 static bool BuildResult(napi_env env, const T *clientContext, napi_value finalResult, napi_value *result)
171 bool isSuccess = clientContext->businessError_.errorNum == CallResult::SUCCESS;
176 NapiCommonUtils::BuildBusinessError(env, result[0], clientContext->businessError_);