• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 #include "interceptor_manager_global.h"
16 #include <cinttypes>
17 #include "input_event_data_transformation.h"
18 #include "proto.h"
19 #include "souceType.h"
20 
21 namespace OHOS {
22 namespace MMI {
23     namespace {
24         constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, MMI_LOG_DOMAIN, "InterceptorManagerGlobal" };
25     }
26 } // namespace MMI
27 } // namespace OHOS
28 
InterceptorManagerGlobal()29 OHOS::MMI::InterceptorManagerGlobal::InterceptorManagerGlobal() {}
30 
~InterceptorManagerGlobal()31 OHOS::MMI::InterceptorManagerGlobal::~InterceptorManagerGlobal() {}
32 
OnAddInterceptor(int32_t sourceType,int32_t id,SessionPtr session)33 void OHOS::MMI::InterceptorManagerGlobal::OnAddInterceptor(int32_t sourceType, int32_t id, SessionPtr session)
34 {
35     MMI_LOGD("enter");
36     std::lock_guard<std::mutex> lock(mu_);
37     InterceptorItem interceptorItem = {};
38     interceptorItem.sourceType = sourceType;
39     interceptorItem.id = id;
40     interceptorItem.session = session;
41     auto iter = std::find(interceptors_.begin(), interceptors_.end(), interceptorItem);
42     if (iter != interceptors_.end()) {
43         MMI_LOGE("touchpad event repeate register");
44         return;
45     } else {
46         iter = interceptors_.insert(iter, interceptorItem);
47         MMI_LOGD("sourceType:%{public}d,fd:%{public}d register in server", sourceType, session->GetFd());
48     }
49     MMI_LOGD("leave");
50 }
51 
OnRemoveInterceptor(int32_t id)52 void OHOS::MMI::InterceptorManagerGlobal::OnRemoveInterceptor(int32_t id)
53 {
54     MMI_LOGD("enter");
55     std::lock_guard<std::mutex> lock(mu_);
56     InterceptorItem interceptorItem = {};
57     interceptorItem.id = id;
58     auto iter = std::find(interceptors_.begin(), interceptors_.end(), interceptorItem);
59     if (iter == interceptors_.end()) {
60         MMI_LOGE("OnRemoveInterceptor::interceptorItem does not exist");
61     } else {
62         MMI_LOGD("sourceType:%{public}d,fd:%{public}d remove from server", iter->sourceType,
63                  iter->session->GetFd());
64         interceptors_.erase(iter);
65     }
66     MMI_LOGD("leave");
67 }
68 
OnPointerEvent(std::shared_ptr<PointerEvent> pointerEvent)69 bool OHOS::MMI::InterceptorManagerGlobal::OnPointerEvent(std::shared_ptr<PointerEvent> pointerEvent)
70 {
71     MMI_LOGD("enter");
72     CHKPF(pointerEvent);
73     if (interceptors_.empty()) {
74         MMI_LOGE("InterceptorManagerGlobal::%{public}s no interceptor to send msg", __func__);
75         return false;
76     }
77     PointerEvent::PointerItem pointer;
78     CHKF(pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), pointer), PARAM_INPUT_FAIL);
79     MMI_LOGD("Interceptor-servereventTouchpad:actionTime:%{public}" PRId64 ","
80              "sourceType:%{public}d,pointerAction:%{public}d,"
81              "pointer:%{public}d,point.x:%{public}d,point.y:%{public}d,press:%{public}d",
82              pointerEvent->GetActionTime(), pointerEvent->GetSourceType(), pointerEvent->GetPointerAction(),
83              pointerEvent->GetPointerId(), pointer.GetGlobalX(), pointer.GetGlobalY(), pointer.IsPressed());
84     for (const auto &item : interceptors_) {
85         NetPacket pkt(MmiMessageId::TOUCHPAD_EVENT_INTERCEPTOR);
86         InputEventDataTransformation::Marshalling(pointerEvent, pkt);
87         pkt << item.session->GetPid() << item.id;
88         MMI_LOGD("server send the interceptor msg to client, pid:%{public}d", item.session->GetPid());
89         item.session->SendMsg(pkt);
90     }
91     MMI_LOGD("leave");
92     return true;
93 }
94 
OnKeyEvent(std::shared_ptr<KeyEvent> keyEvent)95 bool OHOS::MMI::InterceptorManagerGlobal::OnKeyEvent(std::shared_ptr<KeyEvent> keyEvent)
96 {
97     MMI_LOGD("enter");
98     CHKPF(keyEvent);
99     if (interceptors_.empty()) {
100         MMI_LOGE("InterceptorManagerGlobal::%{public}s no interceptor to send msg", __func__);
101         return false;
102     }
103     for (const auto &item : interceptors_) {
104         if (item.sourceType == SOURCETYPE_KEY) {
105             NetPacket pkt(MmiMessageId::KEYBOARD_EVENT_INTERCEPTOR);
106             InputEventDataTransformation::KeyEventToNetPacket(keyEvent, pkt);
107             pkt << item.session->GetPid();
108             MMI_LOGD("server send the interceptor msg to client, pid:%{public}d", item.session->GetPid());
109             item.session->SendMsg(pkt);
110         }
111     }
112     MMI_LOGD("leave");
113     return true;
114 }