@@ -117,26 +117,127 @@ BOOL CP2XPProtocol_Packet::P2XPProtocol_Packet_Lan(XENGINE_PROTOCOLHDR* pSt_Prot
117117 P2XPProtocol_dwErrorCode = ERROR_XENGINE_P2XP_PROTOCOL_PARAMENT;
118118 return FALSE ;
119119 }
120- Json::Value st_JsonRoot;
121- Json::Value st_JsonArray;
122- for (int i = 0 ; i < nListCount; i++)
123- {
124- Json::Value st_JsonObject;
125- st_JsonObject[" ClientUser" ] = (*pppSt_ListClients)[i]->tszUserName ;
126- st_JsonObject[" ClientAddr" ] = (*pppSt_ListClients)[i]->tszPrivateAddr ;
127- st_JsonArray.append (st_JsonObject);
128- }
129- st_JsonRoot[" nCode" ] = 0 ;
130- st_JsonRoot[" lpszMsgBuffer" ] = " sucess" ;
131- st_JsonRoot[" ClientArray" ] = st_JsonArray;
132- st_JsonRoot[" ClientCount" ] = nListCount;
120+ Json::Value st_JsonRoot;
121+ Json::Value st_JsonArray;
122+ for (int i = 0 ; i < nListCount; i++)
123+ {
124+ Json::Value st_JsonObject;
125+ st_JsonObject[" ClientUser" ] = (*pppSt_ListClients)[i]->tszUserName ;
126+ st_JsonObject[" ClientAddr" ] = (*pppSt_ListClients)[i]->tszPrivateAddr ;
127+ st_JsonArray.append (st_JsonObject);
128+ }
129+ st_JsonRoot[" nCode" ] = 0 ;
130+ st_JsonRoot[" lpszMsgBuffer" ] = " sucess" ;
131+ st_JsonRoot[" ClientArray" ] = st_JsonArray;
132+ st_JsonRoot[" ClientCount" ] = nListCount;
133133
134134 pSt_ProtocolHdr->unPacketSize = st_JsonRoot.toStyledString ().length ();
135135
136136 *pInt_MsgLen = sizeof (XENGINE_PROTOCOLHDR) + st_JsonRoot.toStyledString ().length ();
137137 memcpy (ptszMsgBuffer, pSt_ProtocolHdr, sizeof (XENGINE_PROTOCOLHDR));
138138 memcpy (ptszMsgBuffer + sizeof (XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString ().c_str (), pSt_ProtocolHdr->unPacketSize );
139- return TRUE ;
139+ return TRUE ;
140+ }
141+ /* *******************************************************************
142+ 函数名称:P2XPProtocol_Packet_WLan
143+ 函数功能:响应同步局域网所有地址列表
144+ 参数.一:pSt_ProtocolHdr
145+ In/Out:In
146+ 类型:数据结构指针
147+ 可空:N
148+ 意思:输入要打包的协议头
149+ 参数.二:pStl_ListClients
150+ In/Out:In
151+ 类型:容器指针
152+ 可空:N
153+ 意思:客户端列表
154+ 参数.三:ptszMsgBuffer
155+ In/Out:Out
156+ 类型:字符指针
157+ 可空:N
158+ 意思:导出封装好的缓冲区
159+ 参数.四:pInt_MsgLen
160+ In/Out:In/Out
161+ 类型:整数型指针
162+ 可空:N
163+ 意思:输入你的缓冲区大小,输出缓冲区真实大小
164+ 返回值
165+ 类型:逻辑型
166+ 意思:是否成功
167+ 备注:
168+ *********************************************************************/
169+ BOOL CP2XPProtocol_Packet::P2XPProtocol_Packet_WLan (XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, list<XENGINE_P2XPPEER_PROTOCOL>* pStl_ListClients, TCHAR* ptszMsgBuffer, int * pInt_MsgLen)
170+ {
171+ P2XPProtocol_IsErrorOccur = FALSE ;
172+
173+ if ((NULL == pStl_ListClients) || (NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen))
174+ {
175+ P2XPProtocol_IsErrorOccur = FALSE ;
176+ P2XPProtocol_dwErrorCode = ERROR_XENGINE_P2XP_PROTOCOL_PARAMENT;
177+ return FALSE ;
178+ }
179+ unordered_map<tstring, list<P2XPPROTOCOL_LANPACKET>> stl_MapClient;
180+ // 首先处理公网下的局域网网段列表
181+ for (auto stl_ListIterator = pStl_ListClients->begin (); stl_ListIterator != pStl_ListClients->end (); stl_ListIterator++)
182+ {
183+ TCHAR tszClientAddr[128 ];
184+ XENGINE_LIBADDR st_LibAddr;
185+ P2XPPROTOCOL_LANPACKET st_LANPacket;
186+
187+ memset (tszClientAddr, ' \0 ' , sizeof (tszClientAddr));
188+ memset (&st_LibAddr, ' \0 ' , sizeof (XENGINE_LIBADDR));
189+ memset (&st_LANPacket, ' \0 ' , sizeof (P2XPPROTOCOL_LANPACKET));
190+ // 分割
191+ BaseLib_OperatorIPAddr_IsIPV4Addr (stl_ListIterator->tszPrivateAddr , &st_LibAddr);
192+ _stprintf (tszClientAddr, _T (" %d.%d.%d" ), st_LibAddr.nIPAddr1 , st_LibAddr.nIPAddr2 , st_LibAddr.nIPAddr3 );
193+ // 赋值
194+ _tcscpy (st_LANPacket.tszUsername , stl_ListIterator->tszUserName );
195+ _tcscpy (st_LANPacket.tszClientAddr , stl_ListIterator->tszPrivateAddr );
196+ // 判断是否存在
197+ unordered_map<tstring, list<P2XPPROTOCOL_LANPACKET>>::iterator stl_MapIterator = stl_MapClient.find (tszClientAddr);
198+ if (stl_MapIterator == stl_MapClient.end ())
199+ {
200+ list<P2XPPROTOCOL_LANPACKET> stl_ListClient;
201+
202+ stl_ListClient.push_back (st_LANPacket);
203+ stl_MapClient.insert (make_pair (tszClientAddr, stl_ListClient));
204+ }
205+ else
206+ {
207+ stl_MapIterator->second .push_back (st_LANPacket);
208+ }
209+ }
210+ // 打包成JSON数据
211+ int nCount = 0 ;
212+ Json::Value st_JsonRoot;
213+ Json::Value st_JsonArray;
214+
215+ for (auto stl_MapIterator = stl_MapClient.begin (); stl_MapIterator != stl_MapClient.end (); stl_MapIterator++)
216+ {
217+ Json::Value st_JsonList;
218+ for (auto stl_ListIterator = stl_MapIterator->second .begin (); stl_ListIterator != stl_MapIterator->second .end (); stl_ListIterator++)
219+ {
220+ Json::Value st_JsonObject;
221+
222+ nCount++;
223+ st_JsonObject[" ClientUser" ] = stl_ListIterator->tszUsername ;
224+ st_JsonObject[" ClientAddr" ] = stl_ListIterator->tszClientAddr ;
225+ st_JsonList.append (st_JsonObject);
226+ }
227+ st_JsonArray[" tszLANAddr" ] = stl_MapIterator->first .c_str ();
228+ st_JsonArray[" tszLANList" ] = st_JsonList;
229+ }
230+ st_JsonRoot[" nCode" ] = 0 ;
231+ st_JsonRoot[" lpszMsgBuffer" ] = " sucess" ;
232+ st_JsonRoot[" ClientArray" ] = st_JsonArray;
233+ st_JsonRoot[" ClientCount" ] = nCount;
234+
235+ pSt_ProtocolHdr->unPacketSize = st_JsonRoot.toStyledString ().length ();
236+
237+ *pInt_MsgLen = sizeof (XENGINE_PROTOCOLHDR) + st_JsonRoot.toStyledString ().length ();
238+ memcpy (ptszMsgBuffer, pSt_ProtocolHdr, sizeof (XENGINE_PROTOCOLHDR));
239+ memcpy (ptszMsgBuffer + sizeof (XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString ().c_str (), pSt_ProtocolHdr->unPacketSize );
240+ return TRUE ;
140241}
141242/* *******************************************************************
142243函数名称:P2XPProtocol_Packet_User
0 commit comments