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