17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47c804472Sopenharmony_ci * you may not use this file except in compliance with the License.
57c804472Sopenharmony_ci * You may obtain a copy of the License at
67c804472Sopenharmony_ci *
77c804472Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87c804472Sopenharmony_ci *
97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127c804472Sopenharmony_ci * See the License for the specific language governing permissions and
137c804472Sopenharmony_ci * limitations under the License.
147c804472Sopenharmony_ci */
157c804472Sopenharmony_ci
167c804472Sopenharmony_ci#include "VirtualMessageImpl.h"
177c804472Sopenharmony_ci#include "PreviewerEngineLog.h"
187c804472Sopenharmony_ci
197c804472Sopenharmony_ciVirtualMessageImpl& VirtualMessageImpl::GetInstance()
207c804472Sopenharmony_ci{
217c804472Sopenharmony_ci    static VirtualMessageImpl instance;
227c804472Sopenharmony_ci    return instance;
237c804472Sopenharmony_ci}
247c804472Sopenharmony_ci
257c804472Sopenharmony_civoid VirtualMessageImpl::RegistBundle(const char* bundleAppName, SuccessCallback success, FailCallback fail)
267c804472Sopenharmony_ci{
277c804472Sopenharmony_ci    mutex.lock();
287c804472Sopenharmony_ci    std::string buildeName(bundleAppName);
297c804472Sopenharmony_ci    callBacks[buildeName] = std::make_pair(success, fail);
307c804472Sopenharmony_ci    mutex.unlock();
317c804472Sopenharmony_ci}
327c804472Sopenharmony_ci
337c804472Sopenharmony_civoid VirtualMessageImpl::UnregistBundle(const char* bundleAppName)
347c804472Sopenharmony_ci{
357c804472Sopenharmony_ci    mutex.lock();
367c804472Sopenharmony_ci    callBacks.erase(std::string(bundleAppName));
377c804472Sopenharmony_ci    mutex.unlock();
387c804472Sopenharmony_ci}
397c804472Sopenharmony_ci
407c804472Sopenharmony_cistd::vector<char> VirtualMessageImpl::StringToCharVector(std::string str) const
417c804472Sopenharmony_ci{
427c804472Sopenharmony_ci    std::vector<char> vec(str.begin(), str.end());
437c804472Sopenharmony_ci    vec.push_back('\0');
447c804472Sopenharmony_ci    return vec;
457c804472Sopenharmony_ci}
467c804472Sopenharmony_ci
477c804472Sopenharmony_civoid VirtualMessageImpl::SendVirtualMessage(MessageInfo info)
487c804472Sopenharmony_ci{
497c804472Sopenharmony_ci    OHOS::FeatureAbilityDataInfo osInfo;
507c804472Sopenharmony_ci    std::vector<char> deviceId = StringToCharVector(info.deviceID);
517c804472Sopenharmony_ci    std::vector<char> bundleName = StringToCharVector(info.bundleName);
527c804472Sopenharmony_ci    std::vector<char> abilityName = StringToCharVector(info.abilityName);
537c804472Sopenharmony_ci    std::vector<char> message = StringToCharVector(info.message);
547c804472Sopenharmony_ci    osInfo.deviceID = &deviceId[0];
557c804472Sopenharmony_ci    osInfo.bundleName = &bundleName[0];
567c804472Sopenharmony_ci    osInfo.abilityName = &abilityName[0];
577c804472Sopenharmony_ci    osInfo.message = &message[0];
587c804472Sopenharmony_ci    osInfo.messageLength = static_cast<uint32_t>(message.size());
597c804472Sopenharmony_ci
607c804472Sopenharmony_ci    mutex.lock();
617c804472Sopenharmony_ci    if (callBacks.size() > 1) {
627c804472Sopenharmony_ci        ILOG("VirtualMessage callBacks size > 1.");
637c804472Sopenharmony_ci    }
647c804472Sopenharmony_ci
657c804472Sopenharmony_ci    for (auto iter = callBacks.begin(); iter != callBacks.end(); iter++) {
667c804472Sopenharmony_ci        if (iter->second.first == nullptr) {
677c804472Sopenharmony_ci            ILOG("VirtualAbilityKit::VirtualMessage callback is null");
687c804472Sopenharmony_ci        }
697c804472Sopenharmony_ci        iter->second.first((reinterpret_cast<void*>(&info)));
707c804472Sopenharmony_ci    }
717c804472Sopenharmony_ci    mutex.unlock();
727c804472Sopenharmony_ci}
73