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 #include "internal_message.h"
16 #include "securec.h"
17 #include "wifi_log.h"
18
19 #undef LOG_TAG
20 #define LOG_TAG "OHWIFI_INTERNAL_MESSAGE"
21
22 namespace OHOS {
23 namespace Wifi {
SaveIntData(int data)24 void MessageBody::SaveIntData(int data)
25 {
26 intArray_.push_back(data);
27 return;
28 }
29
SaveStringData(std::string data)30 void MessageBody::SaveStringData(std::string data)
31 {
32 stringArray_.push_back(data);
33 return;
34 }
35
GetIntData()36 int MessageBody::GetIntData()
37 {
38 if (intArray_.empty()) {
39 LOGE("intArray is null.");
40 return 0;
41 }
42
43 int tmp = intArray_.front();
44 intArray_.pop_front();
45 return tmp;
46 }
47
GetStringData()48 std::string MessageBody::GetStringData()
49 {
50 std::string tmp;
51 if (stringArray_.empty()) {
52 LOGE("stringArray is null.");
53 return tmp;
54 }
55
56 tmp = stringArray_.front();
57 stringArray_.pop_front();
58 return tmp;
59 }
60
ClearAllData()61 void MessageBody::ClearAllData()
62 {
63 intArray_.clear();
64 stringArray_.clear();
65 return;
66 }
67
CopyMessageBody(const MessageBody & origBody)68 void MessageBody::CopyMessageBody(const MessageBody &origBody)
69 {
70 intArray_.assign(origBody.intArray_.begin(), origBody.intArray_.end());
71 stringArray_.assign(origBody.stringArray_.begin(), origBody.stringArray_.end());
72
73 return;
74 }
75
InternalMessage()76 InternalMessage::InternalMessage()
77 : mMsgName(0),
78 mParam1(0),
79 mParam2(0),
80 pNextMsg(nullptr),
81 mHandleTime(0)
82 {}
83
~InternalMessage()84 InternalMessage::~InternalMessage()
85 {
86 }
87
GetMessageName() const88 int InternalMessage::GetMessageName() const
89 {
90 return mMsgName;
91 }
92
GetParam1() const93 int InternalMessage::GetParam1() const
94 {
95 return mParam1;
96 }
97
GetParam2() const98 int InternalMessage::GetParam2() const
99 {
100 return mParam2;
101 }
102
GetIntFromMessage()103 int InternalMessage::GetIntFromMessage()
104 {
105 return mMessageBody.GetIntData();
106 }
107
GetStringFromMessage()108 std::string InternalMessage::GetStringFromMessage()
109 {
110 return mMessageBody.GetStringData();
111 }
112
GetMessageBody() const113 const MessageBody &InternalMessage::GetMessageBody() const
114 {
115 return mMessageBody;
116 }
117
CopyMessageBody(const MessageBody & origBody)118 void InternalMessage::CopyMessageBody(const MessageBody &origBody)
119 {
120 mMessageBody.CopyMessageBody(origBody);
121 return;
122 }
123
GetNextMsg() const124 InternalMessagePtr InternalMessage::GetNextMsg() const
125 {
126 return pNextMsg;
127 }
128
GetHandleTime() const129 int64_t InternalMessage::GetHandleTime() const
130 {
131 return mHandleTime;
132 }
133
SetMessageName(int msgName)134 void InternalMessage::SetMessageName(int msgName)
135 {
136 mMsgName = msgName;
137 return;
138 }
139
SetParam1(int param1)140 void InternalMessage::SetParam1(int param1)
141 {
142 mParam1 = param1;
143 return;
144 }
145
SetParam2(int param2)146 void InternalMessage::SetParam2(int param2)
147 {
148 mParam2 = param2;
149 return;
150 }
151
ReleaseMessageObj()152 void InternalMessage::ReleaseMessageObj()
153 {
154 mMessageObj.reset();
155 return;
156 }
157
AddIntMessageBody(int data)158 void InternalMessage::AddIntMessageBody(int data)
159 {
160 mMessageBody.SaveIntData(data);
161 return;
162 }
163
AddStringMessageBody(std::string data)164 void InternalMessage::AddStringMessageBody(std::string data)
165 {
166 mMessageBody.SaveStringData(data);
167 return;
168 }
169
ClearMessageBody()170 void InternalMessage::ClearMessageBody()
171 {
172 mMessageBody.ClearAllData();
173 return;
174 }
175
SetNextMsg(InternalMessagePtr nextMsg)176 void InternalMessage::SetNextMsg(InternalMessagePtr nextMsg)
177 {
178 pNextMsg = nextMsg;
179 return;
180 }
181
SetHandleTime(int64_t time)182 void InternalMessage::SetHandleTime(int64_t time)
183 {
184 mHandleTime = time;
185 return;
186 }
187
188 std::unique_ptr<MessageManage> MessageManage::msgManage;
189
GetInstance()190 MessageManage &MessageManage::GetInstance()
191 {
192 if (msgManage.get() == nullptr) {
193 msgManage = std::make_unique<MessageManage>();
194 }
195 return *msgManage;
196 }
197
MessageManage()198 MessageManage::MessageManage()
199 {}
200
~MessageManage()201 MessageManage::~MessageManage()
202 {}
203
CreateMessage()204 InternalMessagePtr MessageManage::CreateMessage()
205 {
206 auto pMessage = std::make_shared<InternalMessage>();
207 return pMessage;
208 }
209
CreateMessage(const InternalMessagePtr orig)210 InternalMessagePtr MessageManage::CreateMessage(const InternalMessagePtr orig)
211 {
212 InternalMessagePtr m = CreateMessage();
213 if (m == nullptr) {
214 return nullptr;
215 }
216
217 m->SetMessageName(orig->GetMessageName());
218 m->SetParam1(orig->GetParam1());
219 m->SetParam2(orig->GetParam2());
220 m->SetMessageObj(orig->GetMessageObj());
221 m->CopyMessageBody(orig->GetMessageBody());
222
223 return m;
224 }
225
CreateMessage(int messageName)226 InternalMessagePtr MessageManage::CreateMessage(int messageName)
227 {
228 InternalMessagePtr m = CreateMessage();
229 if (m == nullptr) {
230 return nullptr;
231 }
232
233 m->SetMessageName(messageName);
234 return m;
235 }
236
CreateMessage(int messageName,const std::any & messageObj)237 InternalMessagePtr MessageManage::CreateMessage(int messageName, const std::any &messageObj)
238 {
239 InternalMessagePtr m = CreateMessage();
240 if (m == nullptr) {
241 return nullptr;
242 }
243
244 m->SetMessageName(messageName);
245
246 m->SetMessageObj(messageObj);
247 return m;
248 }
249
CreateMessage(int messageName,int param1,int param2)250 InternalMessagePtr MessageManage::CreateMessage(int messageName, int param1, int param2)
251 {
252 InternalMessagePtr m = CreateMessage();
253 if (m == nullptr) {
254 return nullptr;
255 }
256
257 m->SetMessageName(messageName);
258 m->SetParam1(param1);
259 m->SetParam2(param2);
260 return m;
261 }
262
CreateMessage(int messageName,int param1,int param2,const std::any & messageObj)263 InternalMessagePtr MessageManage::CreateMessage(int messageName, int param1, int param2, const std::any &messageObj)
264 {
265 InternalMessagePtr m = CreateMessage();
266 if (m == nullptr) {
267 return nullptr;
268 }
269
270 m->SetMessageName(messageName);
271 m->SetParam1(param1);
272 m->SetParam2(param2);
273 m->SetMessageObj(messageObj);
274 return m;
275 }
276
ReclaimMsg(InternalMessagePtr m)277 void MessageManage::ReclaimMsg(InternalMessagePtr m)
278 {
279 if (m == nullptr) {
280 return;
281 }
282
283 m->SetMessageName(0);
284 m->SetParam1(0);
285 m->SetParam2(0);
286 m->ReleaseMessageObj();
287 m->ClearMessageBody();
288 m = nullptr;
289 return;
290 }
291 } // namespace Wifi
292 } // namespace OHOS