1 /* 2 * Copyright (c) 2022 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 #include "form_event_handler.h" 17 #include "hilog_wrapper.h" 18 19 namespace OHOS { 20 namespace AppExecFwk { 21 int64_t FormEventHandler::eventId_ = 0; FormEventHandler(const std::shared_ptr<AppExecFwk::EventRunner> & runner)22FormEventHandler::FormEventHandler(const std::shared_ptr<AppExecFwk::EventRunner> &runner) 23 : AppExecFwk::EventHandler(runner) 24 { 25 } 26 ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)27void FormEventHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event) 28 { 29 if (!event) { 30 HILOG_ERROR("event is nullptr"); 31 return; 32 } 33 34 std::lock_guard<std::mutex> lock(observerMutex_); 35 for (auto &observer : observers_) { 36 if (observer == nullptr) { 37 HILOG_ERROR("observer is nullptr"); 38 continue; 39 } 40 41 observer->OnEventTimeoutResponse(event->GetInnerEventId(), event->GetParam()); 42 } 43 } 44 GetEventId()45int64_t FormEventHandler::GetEventId() 46 { 47 eventId_++; 48 return eventId_; 49 } 50 RegisterEventTimeoutObserver(const std::shared_ptr<FormEventTimeoutObserver> & observer)51void FormEventHandler::RegisterEventTimeoutObserver(const std::shared_ptr<FormEventTimeoutObserver> &observer) 52 { 53 HILOG_DEBUG("%{public}s called.", __func__); 54 std::lock_guard<std::mutex> lock(observerMutex_); 55 auto iter = observers_.find(observer); 56 if (iter != observers_.end()) { 57 HILOG_ERROR("observer repeat attach."); 58 return; 59 } 60 observers_.emplace(observer); 61 } 62 UnregisterEventTimeoutObserver(const std::shared_ptr<FormEventTimeoutObserver> & observer)63void FormEventHandler::UnregisterEventTimeoutObserver(const std::shared_ptr<FormEventTimeoutObserver> &observer) 64 { 65 HILOG_DEBUG("%{public}s called.", __func__); 66 std::lock_guard<std::mutex> lock(observerMutex_); 67 auto iter = observers_.find(observer); 68 if (iter == observers_.end()) { 69 HILOG_ERROR("observer is not exist."); 70 return; 71 } 72 73 observers_.erase(iter); 74 } 75 } // namespace AppExecFwk 76 } // namespace OHOS 77