diff --git a/frameworks/js/napi/update/BUILD.gn b/frameworks/js/napi/update/BUILD.gn index b2bc922aa690b1043ce79c3c5773d7a8b5c10f86..a9624f520ea5960de4f82810285701356d4c448d 100644 --- a/frameworks/js/napi/update/BUILD.gn +++ b/frameworks/js/napi/update/BUILD.gn @@ -45,7 +45,6 @@ ohos_shared_library("$updateengine_client_library_name") { external_deps = [ "c_utils:utils", # sptr - "eventhandler:libeventhandler", "hilog:libhilog", ] diff --git a/frameworks/js/napi/update/include/session_manager.h b/frameworks/js/napi/update/include/session_manager.h index 585abe572a2fac6b7908d3abdd927b195cb10777..38bf5dc06a3daf8a99df6a8a2c60c8a6bc05b6ec 100644 --- a/frameworks/js/napi/update/include/session_manager.h +++ b/frameworks/js/napi/update/include/session_manager.h @@ -25,7 +25,6 @@ #include "base_session.h" #include "event_classify_info.h" -#include "event_handler.h" #include "event_info.h" namespace OHOS::UpdateEngine { @@ -55,7 +54,6 @@ private: napi_ref thisReference_ {}; std::map> sessions_; std::recursive_mutex sessionMutex_; - std::shared_ptr handler_; }; } // namespace OHOS::UpdateEngine #endif // UPDATE_SESSION_MGR_H \ No newline at end of file diff --git a/frameworks/js/napi/update/src/session_manager.cpp b/frameworks/js/napi/update/src/session_manager.cpp index 91e61f1a3c64e8200914ebe7ed5e2e7a2454a4f7..fa0cd123ceeb09cb4ba37f331f35e710e8841d0f 100644 --- a/frameworks/js/napi/update/src/session_manager.cpp +++ b/frameworks/js/napi/update/src/session_manager.cpp @@ -29,7 +29,6 @@ namespace OHOS::UpdateEngine { SessionManager::SessionManager(napi_env env, napi_ref thisReference) : env_(env), thisReference_(thisReference) { ENGINE_LOGI("SessionManager constructor"); - handler_ = std::make_shared(AppExecFwk::EventRunner::GetMainEventRunner()); } SessionManager::~SessionManager() @@ -228,11 +227,29 @@ void SessionManager::PublishToJS(const EventClassifyInfo &eventClassifyInfo, con void SessionManager::Emit(const EventClassifyInfo &eventClassifyInfo, const EventInfo &eventInfo) { ENGINE_LOGI("SessionManager::Emit 0x%{public}x", CAST_INT(eventClassifyInfo.eventClassify)); - auto task = [eventClassifyInfo, eventInfo, this]() { PublishToJS(eventClassifyInfo, eventInfo); }; - if (handler_ == nullptr) { - ENGINE_LOGI("handler_ is nullptr"); - return; - } - handler_->PostTask(task); + uv_loop_s *loop = nullptr; + napi_get_uv_event_loop(env_, &loop); + PARAM_CHECK(loop != nullptr, return, "get event loop failed."); + + using UvWorkData = std::tuple; + UvWorkData *data = new (std::nothrow) std::tuple(this, eventClassifyInfo, eventInfo); + PARAM_CHECK(data != nullptr, return, "alloc data failed."); + + uv_work_t *work = new (std::nothrow) uv_work_t; + PARAM_CHECK(work != nullptr, delete data; return, "alloc work failed."); + + work->data = static_cast(data); + uv_queue_work_with_qos( + loop, + work, + [](uv_work_t *work) { ENGINE_LOGI("print job info"); }, + [](uv_work_t *work, int status) { + UvWorkData *data = static_cast(work->data); + auto &[mgr, eventClassifyInfo, eventInfo] = *data; + mgr->PublishToJS(eventClassifyInfo, eventInfo); + delete data; + delete work; + }, + uv_qos_default); } } // namespace OHOS::UpdateEngine \ No newline at end of file