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