1545fdf9bSopenharmony_ci/* 2545fdf9bSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3545fdf9bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4545fdf9bSopenharmony_ci * you may not use this file except in compliance with the License. 5545fdf9bSopenharmony_ci * You may obtain a copy of the License at 6545fdf9bSopenharmony_ci * 7545fdf9bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8545fdf9bSopenharmony_ci * 9545fdf9bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10545fdf9bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11545fdf9bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12545fdf9bSopenharmony_ci * See the License for the specific language governing permissions and 13545fdf9bSopenharmony_ci * limitations under the License. 14545fdf9bSopenharmony_ci */ 15545fdf9bSopenharmony_ci 16545fdf9bSopenharmony_ci#include "status_receiver_impl.h" 17545fdf9bSopenharmony_ci 18545fdf9bSopenharmony_ci#include "app_log_wrapper.h" 19545fdf9bSopenharmony_ci 20545fdf9bSopenharmony_cinamespace OHOS { 21545fdf9bSopenharmony_cinamespace AppExecFwk { 22545fdf9bSopenharmony_cinamespace { 23545fdf9bSopenharmony_ciconst int32_t MINIMUM_WAITTING_TIME = 180; // 3 mins 24545fdf9bSopenharmony_ci} // namespace 25545fdf9bSopenharmony_ci 26545fdf9bSopenharmony_ciStatusReceiverImpl::StatusReceiverImpl(int32_t waittingTime) : waittingTime_(waittingTime) 27545fdf9bSopenharmony_ci{ 28545fdf9bSopenharmony_ci APP_LOGI("create status receiver instance"); 29545fdf9bSopenharmony_ci} 30545fdf9bSopenharmony_ci 31545fdf9bSopenharmony_ciStatusReceiverImpl::StatusReceiverImpl() : waittingTime_(MINIMUM_WAITTING_TIME) 32545fdf9bSopenharmony_ci{ 33545fdf9bSopenharmony_ci APP_LOGI("create status receiver instance"); 34545fdf9bSopenharmony_ci} 35545fdf9bSopenharmony_ci 36545fdf9bSopenharmony_ciStatusReceiverImpl::~StatusReceiverImpl() 37545fdf9bSopenharmony_ci{ 38545fdf9bSopenharmony_ci APP_LOGI("destroy status receiver instance"); 39545fdf9bSopenharmony_ci} 40545fdf9bSopenharmony_ci 41545fdf9bSopenharmony_civoid StatusReceiverImpl::OnFinished(const int32_t resultCode, const std::string &resultMsg) 42545fdf9bSopenharmony_ci{ 43545fdf9bSopenharmony_ci APP_LOGI("on finished result is %{public}d, %{public}s", resultCode, resultMsg.c_str()); 44545fdf9bSopenharmony_ci std::lock_guard<std::mutex> lock(setValueMutex_); 45545fdf9bSopenharmony_ci if (!isSetValue) { 46545fdf9bSopenharmony_ci isSetValue = true; 47545fdf9bSopenharmony_ci resultCodeSignal_.set_value(resultCode); 48545fdf9bSopenharmony_ci resultMsgSignal_.set_value(resultMsg); 49545fdf9bSopenharmony_ci } else { 50545fdf9bSopenharmony_ci APP_LOGW("resultCodeSignal_ is set"); 51545fdf9bSopenharmony_ci } 52545fdf9bSopenharmony_ci} 53545fdf9bSopenharmony_ci 54545fdf9bSopenharmony_civoid StatusReceiverImpl::OnStatusNotify(const int progress) 55545fdf9bSopenharmony_ci{ 56545fdf9bSopenharmony_ci APP_LOGI("on OnStatusNotify is %{public}d", progress); 57545fdf9bSopenharmony_ci} 58545fdf9bSopenharmony_ci 59545fdf9bSopenharmony_ciint32_t StatusReceiverImpl::GetResultCode() const 60545fdf9bSopenharmony_ci{ 61545fdf9bSopenharmony_ci auto future = resultCodeSignal_.get_future(); 62545fdf9bSopenharmony_ci if (future.wait_for(std::chrono::seconds(waittingTime_)) == std::future_status::ready) { 63545fdf9bSopenharmony_ci int32_t resultCode = future.get(); 64545fdf9bSopenharmony_ci return resultCode; 65545fdf9bSopenharmony_ci } 66545fdf9bSopenharmony_ci return ERR_OPERATION_TIME_OUT; 67545fdf9bSopenharmony_ci} 68545fdf9bSopenharmony_ci 69545fdf9bSopenharmony_cistd::string StatusReceiverImpl::GetResultMsg() const 70545fdf9bSopenharmony_ci{ 71545fdf9bSopenharmony_ci auto future = resultMsgSignal_.get_future(); 72545fdf9bSopenharmony_ci if (future.wait_for(std::chrono::seconds(waittingTime_)) == std::future_status::ready) { 73545fdf9bSopenharmony_ci std::string resultMsg = future.get(); 74545fdf9bSopenharmony_ci return resultMsg; 75545fdf9bSopenharmony_ci } 76545fdf9bSopenharmony_ci return ""; 77545fdf9bSopenharmony_ci} 78545fdf9bSopenharmony_ci} // namespace AppExecFwk 79545fdf9bSopenharmony_ci} // namespace OHOS