1 /*
2  * Copyright (c) 2021 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 "message_handler.h"
17 #include "softbus_adapter_mem.h"
18 #include "comm_log.h"
19 
20 #define CASE_ONE_WHAT 1
21 #define CASE_TWO_WHAT 2
22 #define CASE_THREE_WHAT 3
23 #define CASE_FOUR_WHAT 4
24 
25 #define CASE_ARG 2
26 #define CASE_FOUR_POST_DELAY 10000
27 #define CASE_THREE_POST_DELAY 2000
28 
29 #define CASE_FOUR_OBJ_SIZE 100
30 
NetworkingHandleMessage(const SoftBusMessage * msg)31 static void NetworkingHandleMessage(const SoftBusMessage* msg)
32 {
33     COMM_LOGI(COMM_TEST, "NetworkingHandleMessage msg what=%{public}d", msg->what);
34 }
35 
36 static SoftBusHandler g_networkingHandler = {
37     .name ="g_networkingHandler"
38 };
39 
CustomfreeMessage(SoftBusMessage * msg)40 static void CustomfreeMessage(SoftBusMessage* msg)
41 {
42     COMM_LOGI(COMM_TEST, "CustomfreeMessage msg=%{public}d", msg->what);
43     if (msg->what == CASE_FOUR_POST_DELAY) {
44         SoftBusFree(msg->obj);
45         SoftBusFree(msg);
46     }
47 }
48 
TestMessageHandler(void)49 void TestMessageHandler(void)
50 {
51     g_networkingHandler.looper = GetLooper(LOOP_TYPE_DEFAULT);
52     g_networkingHandler.HandleMessage = NetworkingHandleMessage;
53     COMM_LOGI(COMM_TEST, "testHandler msg1");
54     SoftBusMessage* msg = SoftBusCalloc(sizeof(SoftBusMessage));
55     if (msg == NULL) {
56         COMM_LOGI(COMM_TEST, "msg malloc fail");
57         return;
58     }
59     msg->what = CASE_ONE_WHAT;
60     msg->arg1 = CASE_ARG;
61     msg->handler = &g_networkingHandler;
62     g_networkingHandler.looper->PostMessage(g_networkingHandler.looper, msg);
63     COMM_LOGI(COMM_TEST, "testHandler msg4");
64     SoftBusMessage* msg4 = SoftBusCalloc(sizeof(SoftBusMessage));
65     if (msg4 == NULL) {
66         COMM_LOGI(COMM_TEST, "msg4 malloc fail");
67         return;
68     }
69     msg4->what = CASE_FOUR_WHAT;
70     msg4->arg1 = CASE_ARG;
71     msg4->handler = &g_networkingHandler;
72     msg4->FreeMessage = CustomfreeMessage;
73     msg4->obj = SoftBusMalloc(CASE_FOUR_OBJ_SIZE);
74     if (msg4->obj == NULL) {
75         COMM_LOGI(COMM_TEST, "msg4_obj malloc fail");
76         return;
77     }
78     g_networkingHandler.looper->PostMessageDelay(g_networkingHandler.looper, msg4, CASE_FOUR_POST_DELAY);
79     COMM_LOGI(COMM_TEST, "testHandler msg3");
80     SoftBusMessage* msg3 = SoftBusCalloc(sizeof(SoftBusMessage));
81     if (msg3 == NULL) {
82         COMM_LOGI(COMM_TEST, "msg3 malloc fail");
83         return;
84     }
85     msg3->what = CASE_THREE_WHAT;
86     msg3->arg1 = CASE_ARG;
87     msg3->handler = &g_networkingHandler;
88     g_networkingHandler.looper->PostMessageDelay(g_networkingHandler.looper, msg3, CASE_THREE_POST_DELAY);
89     g_networkingHandler.looper->RemoveMessage(g_networkingHandler.looper, &g_networkingHandler, CASE_THREE_WHAT);
90     COMM_LOGI(COMM_TEST, "testHandler msg2");
91     SoftBusMessage* msg2 = SoftBusCalloc(sizeof(SoftBusMessage));
92     if (msg2 == NULL) {
93         COMM_LOGI(COMM_TEST, "msg2 malloc fail");
94         return;
95     }
96     msg2->what = CASE_TWO_WHAT;
97     msg2->arg1 = CASE_ARG;
98     msg2->handler = &g_networkingHandler;
99     g_networkingHandler.looper->PostMessage(g_networkingHandler.looper, msg2);
100 }
101