1c2b37d2cSopenharmony_ci/* 2c2b37d2cSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3c2b37d2cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c2b37d2cSopenharmony_ci * you may not use this file except in compliance with the License. 5c2b37d2cSopenharmony_ci * You may obtain a copy of the License at 6c2b37d2cSopenharmony_ci * 7c2b37d2cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c2b37d2cSopenharmony_ci * 9c2b37d2cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c2b37d2cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c2b37d2cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c2b37d2cSopenharmony_ci * See the License for the specific language governing permissions and 13c2b37d2cSopenharmony_ci * limitations under the License. 14c2b37d2cSopenharmony_ci */ 15c2b37d2cSopenharmony_ci 16c2b37d2cSopenharmony_ci#ifndef OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_STATE_MACHINE_H 17c2b37d2cSopenharmony_ci#define OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_STATE_MACHINE_H 18c2b37d2cSopenharmony_ci 19c2b37d2cSopenharmony_ci#include <iostream> 20c2b37d2cSopenharmony_ci#include <map> 21c2b37d2cSopenharmony_ci#include "account_state_action.h" 22c2b37d2cSopenharmony_ci#include "account_info.h" 23c2b37d2cSopenharmony_ci 24c2b37d2cSopenharmony_cinamespace OHOS { 25c2b37d2cSopenharmony_cinamespace AccountSA { 26c2b37d2cSopenharmony_ci/** 27c2b37d2cSopenharmony_ci * Account state machine 28c2b37d2cSopenharmony_ci */ 29c2b37d2cSopenharmony_ciclass AccountStateMachine { 30c2b37d2cSopenharmony_cipublic: 31c2b37d2cSopenharmony_ci 32c2b37d2cSopenharmony_ci /** 33c2b37d2cSopenharmony_ci * exception event action, to re-init state machine, and get account state from account server. 34c2b37d2cSopenharmony_ci */ 35c2b37d2cSopenharmony_ci class ExceptionAction : public AccountStateAction { 36c2b37d2cSopenharmony_ci public: 37c2b37d2cSopenharmony_ci /** 38c2b37d2cSopenharmony_ci * exception event action Constructor. 39c2b37d2cSopenharmony_ci */ 40c2b37d2cSopenharmony_ci explicit ExceptionAction(int status) : AccountStateAction(status) {} 41c2b37d2cSopenharmony_ci 42c2b37d2cSopenharmony_ci /** 43c2b37d2cSopenharmony_ci * exception event action Destructor. 44c2b37d2cSopenharmony_ci */ 45c2b37d2cSopenharmony_ci ~ExceptionAction() override {} 46c2b37d2cSopenharmony_ci }; 47c2b37d2cSopenharmony_ci 48c2b37d2cSopenharmony_ci /** 49c2b37d2cSopenharmony_ci * unbound state action. 50c2b37d2cSopenharmony_ci */ 51c2b37d2cSopenharmony_ci class UnboundAction : public AccountStateAction { 52c2b37d2cSopenharmony_ci public: 53c2b37d2cSopenharmony_ci /** 54c2b37d2cSopenharmony_ci * unbound state action Constructor. 55c2b37d2cSopenharmony_ci */ 56c2b37d2cSopenharmony_ci explicit UnboundAction(int status) : AccountStateAction(status) {} 57c2b37d2cSopenharmony_ci 58c2b37d2cSopenharmony_ci /** 59c2b37d2cSopenharmony_ci * unbound state action Destructor. 60c2b37d2cSopenharmony_ci */ 61c2b37d2cSopenharmony_ci ~UnboundAction() override {} 62c2b37d2cSopenharmony_ci }; 63c2b37d2cSopenharmony_ci 64c2b37d2cSopenharmony_ci /** 65c2b37d2cSopenharmony_ci * login state action. 66c2b37d2cSopenharmony_ci */ 67c2b37d2cSopenharmony_ci class LoginAction : public AccountStateAction { 68c2b37d2cSopenharmony_ci public: 69c2b37d2cSopenharmony_ci /** 70c2b37d2cSopenharmony_ci * login state action Constructor. 71c2b37d2cSopenharmony_ci */ 72c2b37d2cSopenharmony_ci explicit LoginAction(int status) : AccountStateAction(status) {} 73c2b37d2cSopenharmony_ci 74c2b37d2cSopenharmony_ci /** 75c2b37d2cSopenharmony_ci * login state action Destructor. 76c2b37d2cSopenharmony_ci */ 77c2b37d2cSopenharmony_ci ~LoginAction() override {} 78c2b37d2cSopenharmony_ci }; 79c2b37d2cSopenharmony_ci 80c2b37d2cSopenharmony_ci /** 81c2b37d2cSopenharmony_ci * logout state action. 82c2b37d2cSopenharmony_ci */ 83c2b37d2cSopenharmony_ci class LogoutAction : public AccountStateAction { 84c2b37d2cSopenharmony_ci public: 85c2b37d2cSopenharmony_ci /** 86c2b37d2cSopenharmony_ci * logout state action Constructor. 87c2b37d2cSopenharmony_ci */ 88c2b37d2cSopenharmony_ci explicit LogoutAction(int status) : AccountStateAction(status) {} 89c2b37d2cSopenharmony_ci 90c2b37d2cSopenharmony_ci /** 91c2b37d2cSopenharmony_ci * logout state action Destructor. 92c2b37d2cSopenharmony_ci */ 93c2b37d2cSopenharmony_ci ~LogoutAction() override {} 94c2b37d2cSopenharmony_ci }; 95c2b37d2cSopenharmony_ci 96c2b37d2cSopenharmony_ci /** 97c2b37d2cSopenharmony_ci * logoff state action. 98c2b37d2cSopenharmony_ci */ 99c2b37d2cSopenharmony_ci class LogoffAction : public AccountStateAction { 100c2b37d2cSopenharmony_ci public: 101c2b37d2cSopenharmony_ci /** 102c2b37d2cSopenharmony_ci * logoff state action Constructor. 103c2b37d2cSopenharmony_ci */ 104c2b37d2cSopenharmony_ci explicit LogoffAction(int status) : AccountStateAction(status) {} 105c2b37d2cSopenharmony_ci 106c2b37d2cSopenharmony_ci /** 107c2b37d2cSopenharmony_ci * logoff state action Destructor. 108c2b37d2cSopenharmony_ci */ 109c2b37d2cSopenharmony_ci ~LogoffAction() override {} 110c2b37d2cSopenharmony_ci }; 111c2b37d2cSopenharmony_ci 112c2b37d2cSopenharmony_ci /** 113c2b37d2cSopenharmony_ci * Account state machine Constructor. 114c2b37d2cSopenharmony_ci */ 115c2b37d2cSopenharmony_ci AccountStateMachine() : currentState_(ACCOUNT_STATE_UNBOUND) 116c2b37d2cSopenharmony_ci { 117c2b37d2cSopenharmony_ci OnInitialize(); 118c2b37d2cSopenharmony_ci } 119c2b37d2cSopenharmony_ci 120c2b37d2cSopenharmony_ci /** 121c2b37d2cSopenharmony_ci * Account state machine Destructor. 122c2b37d2cSopenharmony_ci */ 123c2b37d2cSopenharmony_ci ~AccountStateMachine() 124c2b37d2cSopenharmony_ci { 125c2b37d2cSopenharmony_ci Clean(); 126c2b37d2cSopenharmony_ci } 127c2b37d2cSopenharmony_ci 128c2b37d2cSopenharmony_ci /** 129c2b37d2cSopenharmony_ci * Account state machine initialize. 130c2b37d2cSopenharmony_ci */ 131c2b37d2cSopenharmony_ci void OnInitialize(); 132c2b37d2cSopenharmony_ci 133c2b37d2cSopenharmony_ci /** 134c2b37d2cSopenharmony_ci * Account state machine clean. 135c2b37d2cSopenharmony_ci */ 136c2b37d2cSopenharmony_ci void Clean(); 137c2b37d2cSopenharmony_ci 138c2b37d2cSopenharmony_ci /** 139c2b37d2cSopenharmony_ci * Get account current state 140c2b37d2cSopenharmony_ci * 141c2b37d2cSopenharmony_ci * @return account current state 142c2b37d2cSopenharmony_ci */ 143c2b37d2cSopenharmony_ci int GetAccountState() 144c2b37d2cSopenharmony_ci { 145c2b37d2cSopenharmony_ci return currentState_; 146c2b37d2cSopenharmony_ci } 147c2b37d2cSopenharmony_ci 148c2b37d2cSopenharmony_ci /** 149c2b37d2cSopenharmony_ci * Set account current state 150c2b37d2cSopenharmony_ci * 151c2b37d2cSopenharmony_ci * @param current state 152c2b37d2cSopenharmony_ci */ 153c2b37d2cSopenharmony_ci void SetAccountState(int currentState) 154c2b37d2cSopenharmony_ci { 155c2b37d2cSopenharmony_ci currentState_ = currentState; 156c2b37d2cSopenharmony_ci } 157c2b37d2cSopenharmony_ci 158c2b37d2cSopenharmony_ci /** 159c2b37d2cSopenharmony_ci * Process an state change event. 160c2b37d2cSopenharmony_ci * 161c2b37d2cSopenharmony_ci * @param evt the event info 162c2b37d2cSopenharmony_ci * @return true if the processing was completed, otherwise false 163c2b37d2cSopenharmony_ci */ 164c2b37d2cSopenharmony_ci bool StateChangeProcess(int evt); 165c2b37d2cSopenharmony_ci 166c2b37d2cSopenharmony_ciprivate: 167c2b37d2cSopenharmony_ci /** 168c2b37d2cSopenharmony_ci * Account current state. 169c2b37d2cSopenharmony_ci */ 170c2b37d2cSopenharmony_ci int currentState_; 171c2b37d2cSopenharmony_ci std::map<int, std::map<int, AccountStateAction *>> stateMachineMap_; 172c2b37d2cSopenharmony_ci}; 173c2b37d2cSopenharmony_ci} // namespace AccountSA 174c2b37d2cSopenharmony_ci} // namespace OHOS 175c2b37d2cSopenharmony_ci 176c2b37d2cSopenharmony_ci#endif // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_STATE_MACHINE_H 177