1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef DISTRIBUTEDSCHED_CONTINUE_MANAGER_H 17 #define DISTRIBUTEDSCHED_CONTINUE_MANAGER_H 18 19 #include <map> 20 #include <string> 21 #include <mutex> 22 #include <queue> 23 #include <deque> 24 #include <thread> 25 #include <vector> 26 27 #include "bundle/bundle_manager_internal.h" 28 #include "distributed_mission_focused_listener.h" 29 #include "distributed_mission_broadcast_listener.h" 30 #include "distributed_mission_died_listener.h" 31 #include "event_handler.h" 32 #include "mission_info.h" 33 34 namespace OHOS { 35 namespace DistributedSchedule { 36 const std::string CONTINUE_MANAGER = "continue_manager"; 37 struct currentMissionInfo { 38 int32_t currentMissionId; 39 bool currentIsContibuable; 40 }; 41 class DistributedSchedContinueManager { 42 DECLARE_SINGLE_INSTANCE(DistributedSchedContinueManager); 43 44 public: 45 constexpr static int32_t DMS_SEND_LEN = 5; 46 constexpr static uint8_t DMS_0XF0 = 0xf0; 47 constexpr static uint8_t DMS_0X0F = 0x0f; 48 constexpr static uint8_t DMS_0XFF = 0xff; 49 constexpr static uint8_t DMS_FOCUSED_TYPE = 0x00; 50 constexpr static uint8_t DMS_UNFOCUSED_TYPE = 0x01; 51 constexpr static uint8_t CONTINUE_SHIFT_24 = 0x18; 52 constexpr static uint8_t CONTINUE_SHIFT_16 = 0x10; 53 constexpr static uint8_t CONTINUE_SHIFT_08 = 0x08; 54 constexpr static uint8_t CONTINUE_SHIFT_04 = 0x04; 55 56 void Init(); 57 void UnInit(); 58 void NotifyMissionFocused(const int32_t missionId); 59 void NotifyMissionUnfocused(const int32_t missionId); 60 void NotifyDataRecv(std::string& senderNetworkId, uint8_t* payload, uint32_t dataLen); 61 int32_t RegisterOnListener(const std::string& type, const sptr<IRemoteObject>& obj); 62 int32_t RegisterOffListener(const std::string& type, const sptr<IRemoteObject>& obj); 63 int32_t GetMissionId(const std::string& bundleName, int32_t& missionId); 64 void NotifyDeid(const sptr<IRemoteObject>& obj); 65 int32_t SetMissionContinueState(const int32_t missionId, const AAFwk::ContinueState &state); 66 67 private: 68 void StartEvent(); 69 int32_t DealFocusedBusiness(const int32_t missionId); 70 int32_t DealUnfocusedBusiness(const int32_t missionId); 71 int32_t DealUnBroadcastdBusiness(std::string& senderNetworkId, uint32_t accessTokenId, const int32_t state); 72 void NotifyRecvBroadcast(const sptr<IRemoteObject>& obj, const std::string& networkId, 73 const std::string& bundleName, const int32_t state); 74 int32_t GetBundleName(const int32_t missionId, std::string& bundleName); 75 bool IsContinue(const int32_t& missionId, const std::string& bundleName); 76 int32_t DealSetMissionContinueStateBusiness(const int32_t missionId, const AAFwk::ContinueState &state); 77 int32_t CheckContinueState(const int32_t missionId); 78 private: 79 currentMissionInfo info_; 80 sptr<DistributedMissionFocusedListener> missionFocusedListener_; 81 sptr<DistributedMissionDiedListener> missionDiedListener_; 82 std::string onType_; 83 std::map<std::string, int32_t> focusedMission_; 84 std::map<std::string, std::vector<sptr<IRemoteObject>>> registerOnListener_; 85 std::thread eventThread_; 86 std::condition_variable eventCon_; 87 std::mutex eventMutex_; 88 std::shared_ptr<OHOS::AppExecFwk::EventHandler> eventHandler_; 89 }; 90 } // namespace DistributedSchedule 91 } // namespace OHOS 92 #endif // DISTRIBUTEDSCHED_CONTINUE_MANAGER_H 93