1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#include "i_cooperate_state.h" 17c29fa5a6Sopenharmony_ci 18c29fa5a6Sopenharmony_ci#undef LOG_TAG 19c29fa5a6Sopenharmony_ci#define LOG_TAG "ICooperateState" 20c29fa5a6Sopenharmony_ci 21c29fa5a6Sopenharmony_cinamespace OHOS { 22c29fa5a6Sopenharmony_cinamespace Msdp { 23c29fa5a6Sopenharmony_cinamespace DeviceStatus { 24c29fa5a6Sopenharmony_cinamespace Cooperate { 25c29fa5a6Sopenharmony_ci 26c29fa5a6Sopenharmony_ciICooperateState::ICooperateStep::ICooperateStep(ICooperateState &parent, std::shared_ptr<ICooperateStep> prev) 27c29fa5a6Sopenharmony_ci : parent_(parent), prev_(prev) 28c29fa5a6Sopenharmony_ci{} 29c29fa5a6Sopenharmony_ci 30c29fa5a6Sopenharmony_civoid ICooperateState::TransiteTo(Context &context, CooperateState state) 31c29fa5a6Sopenharmony_ci{ 32c29fa5a6Sopenharmony_ci parent_.TransiteTo(context, state); 33c29fa5a6Sopenharmony_ci} 34c29fa5a6Sopenharmony_ci 35c29fa5a6Sopenharmony_civoid ICooperateState::Switch(std::shared_ptr<ICooperateStep> step) 36c29fa5a6Sopenharmony_ci{ 37c29fa5a6Sopenharmony_ci if (step != nullptr) { 38c29fa5a6Sopenharmony_ci current_ = step; 39c29fa5a6Sopenharmony_ci } 40c29fa5a6Sopenharmony_ci} 41c29fa5a6Sopenharmony_ci 42c29fa5a6Sopenharmony_civoid ICooperateState::ICooperateStep::OnEvent(Context &context, const CooperateEvent &event) 43c29fa5a6Sopenharmony_ci{ 44c29fa5a6Sopenharmony_ci if (auto iter = handlers_.find(event.type); iter != handlers_.end()) { 45c29fa5a6Sopenharmony_ci iter->second(context, event); 46c29fa5a6Sopenharmony_ci } else if (event.type != CooperateEventType::INPUT_POINTER_EVENT) { 47c29fa5a6Sopenharmony_ci FI_HILOGD("Unhandled event(%{public}d)", event.type); 48c29fa5a6Sopenharmony_ci } 49c29fa5a6Sopenharmony_ci} 50c29fa5a6Sopenharmony_ci 51c29fa5a6Sopenharmony_civoid ICooperateState::ICooperateStep::SetNext(std::shared_ptr<ICooperateStep> next) 52c29fa5a6Sopenharmony_ci{ 53c29fa5a6Sopenharmony_ci if (next != nullptr) { 54c29fa5a6Sopenharmony_ci next_ = next; 55c29fa5a6Sopenharmony_ci } else if (next_ != nullptr) { 56c29fa5a6Sopenharmony_ci next_->SetNext(nullptr); 57c29fa5a6Sopenharmony_ci next_ = nullptr; 58c29fa5a6Sopenharmony_ci } 59c29fa5a6Sopenharmony_ci} 60c29fa5a6Sopenharmony_ci 61c29fa5a6Sopenharmony_civoid ICooperateState::ICooperateStep::TransiteTo(Context &context, CooperateState state) 62c29fa5a6Sopenharmony_ci{ 63c29fa5a6Sopenharmony_ci parent_.TransiteTo(context, state); 64c29fa5a6Sopenharmony_ci} 65c29fa5a6Sopenharmony_ci 66c29fa5a6Sopenharmony_civoid ICooperateState::ICooperateStep::Switch(std::shared_ptr<ICooperateStep> step) 67c29fa5a6Sopenharmony_ci{ 68c29fa5a6Sopenharmony_ci parent_.Switch(step); 69c29fa5a6Sopenharmony_ci} 70c29fa5a6Sopenharmony_ci 71c29fa5a6Sopenharmony_civoid ICooperateState::ICooperateStep::Proceed(Context &context, const CooperateEvent &event) 72c29fa5a6Sopenharmony_ci{ 73c29fa5a6Sopenharmony_ci if (next_ != nullptr) { 74c29fa5a6Sopenharmony_ci Switch(next_); 75c29fa5a6Sopenharmony_ci next_->OnProgress(context, event); 76c29fa5a6Sopenharmony_ci } 77c29fa5a6Sopenharmony_ci} 78c29fa5a6Sopenharmony_ci 79c29fa5a6Sopenharmony_civoid ICooperateState::ICooperateStep::Reset(Context &context, const CooperateEvent &event) 80c29fa5a6Sopenharmony_ci{ 81c29fa5a6Sopenharmony_ci if (prev_ != nullptr) { 82c29fa5a6Sopenharmony_ci Switch(prev_); 83c29fa5a6Sopenharmony_ci prev_->OnReset(context, event); 84c29fa5a6Sopenharmony_ci } 85c29fa5a6Sopenharmony_ci} 86c29fa5a6Sopenharmony_ci 87c29fa5a6Sopenharmony_cistd::string ICooperateState::Process::Peer() const 88c29fa5a6Sopenharmony_ci{ 89c29fa5a6Sopenharmony_ci return remoteNetworkId_; 90c29fa5a6Sopenharmony_ci} 91c29fa5a6Sopenharmony_ci 92c29fa5a6Sopenharmony_ciint32_t ICooperateState::Process::StartDeviceId() const 93c29fa5a6Sopenharmony_ci{ 94c29fa5a6Sopenharmony_ci return startDeviceId_; 95c29fa5a6Sopenharmony_ci} 96c29fa5a6Sopenharmony_ci 97c29fa5a6Sopenharmony_cibool ICooperateState::Process::IsPeer(const std::string &networkId) const 98c29fa5a6Sopenharmony_ci{ 99c29fa5a6Sopenharmony_ci return (networkId == remoteNetworkId_); 100c29fa5a6Sopenharmony_ci} 101c29fa5a6Sopenharmony_ci 102c29fa5a6Sopenharmony_civoid ICooperateState::Process::StartCooperate(Context &context, const StartCooperateEvent &event) 103c29fa5a6Sopenharmony_ci{ 104c29fa5a6Sopenharmony_ci remoteNetworkId_ = event.remoteNetworkId; 105c29fa5a6Sopenharmony_ci startDeviceId_ = event.startDeviceId; 106c29fa5a6Sopenharmony_ci} 107c29fa5a6Sopenharmony_ci 108c29fa5a6Sopenharmony_civoid ICooperateState::Process::RemoteStart(Context &context, const DSoftbusStartCooperate &event) 109c29fa5a6Sopenharmony_ci{ 110c29fa5a6Sopenharmony_ci remoteNetworkId_ = event.networkId; 111c29fa5a6Sopenharmony_ci} 112c29fa5a6Sopenharmony_ci 113c29fa5a6Sopenharmony_civoid ICooperateState::Process::RelayCooperate(Context &context, const DSoftbusRelayCooperate &event) 114c29fa5a6Sopenharmony_ci{ 115c29fa5a6Sopenharmony_ci remoteNetworkId_ = event.targetNetworkId; 116c29fa5a6Sopenharmony_ci} 117c29fa5a6Sopenharmony_ci} // namespace Cooperate 118c29fa5a6Sopenharmony_ci} // namespace DeviceStatus 119c29fa5a6Sopenharmony_ci} // namespace Msdp 120c29fa5a6Sopenharmony_ci} // namespace OHOS 121