@@ -263,46 +263,45 @@ static cell_t ws_IsDeflateEnabled(IPluginContext *pContext, const cell_t *params
263263 return pWebsocketServer->m_webSocketServer .isPerMessageDeflateEnabled ();
264264}
265265
266- static cell_t ws_GetClients (IPluginContext *pContext, const cell_t *params)
266+ static cell_t ws_GetClientIdByIndex (IPluginContext *pContext, const cell_t *params)
267267{
268- WebSocketServer *pWebsocketServer = GetWsServerPointer (pContext, params[1 ]);
269-
270- if (!pWebsocketServer)
271- {
272- return 0 ;
273- }
268+ WebSocketServer *pWebsocketServer = GetWsServerPointer (pContext, params[1 ]);
269+ if (!pWebsocketServer)
270+ {
271+ return 0 ;
272+ }
274273
275- cell_t *outputArray;
276- pContext->LocalToPhysAddr (params[2 ], &outputArray);
277- cell_t maxSize = params[3 ];
274+ cell_t index = params[2 ];
275+ const auto & ids = pWebsocketServer->getClientIds ();
278276
279- auto clients = pWebsocketServer->m_webSocketServer .getClients ();
280- size_t count = 0 ;
277+ if (index < 0 || static_cast <size_t >(index) >= ids.size ())
278+ {
279+ return 0 ;
280+ }
281281
282- HandleSecurity sec ( nullptr , myself-> GetIdentity ());
282+ pContext-> StringToLocal (params[ 3 ], params[ 4 ], ids[index]. c_str ());
283283
284- for (const auto &client : clients)
285- {
286- if (count >= maxSize)
287- break ;
288-
289- WebSocketClient *pClient = new WebSocketClient (client.first .get ());
290- HandleError err;
291- Handle_t handle = handlesys->CreateHandleEx (g_htWsClient, pClient, &sec, nullptr , &err);
292-
293- if (handle != BAD_HANDLE )
294- {
295- pClient->m_websocket_handle = handle;
296- pClient->m_keepConnecting = true ;
297- outputArray[count++] = handle;
298- }
299- else
300- {
301- delete pClient;
302- }
303- }
284+ return 1 ;
285+ }
304286
305- return count;
287+ static cell_t ws_GetMaxClientIdLength (IPluginContext *pContext, const cell_t *params)
288+ {
289+ WebSocketServer *pWebsocketServer = GetWsServerPointer (pContext, params[1 ]);
290+ if (!pWebsocketServer)
291+ {
292+ return 0 ;
293+ }
294+
295+ const auto & ids = pWebsocketServer->getClientIds ();
296+ size_t maxLen = 0 ;
297+
298+ for (const auto & id : ids)
299+ {
300+ if (id.length () > maxLen)
301+ maxLen = id.length ();
302+ }
303+
304+ return static_cast <cell_t >(maxLen + 1 );
306305}
307306
308307const sp_nativeinfo_t ws_natives_server[] =
@@ -320,7 +319,8 @@ const sp_nativeinfo_t ws_natives_server[] =
320319 {" WebSocketServer.ClientsCount.get" , ws_GetClientsCount},
321320 {" WebSocketServer.EnablePong.get" , ws_SetOrGetPongEnable},
322321 {" WebSocketServer.EnablePong.set" , ws_SetOrGetPongEnable},
323- {" WebSocketServer.GetClients" , ws_GetClients},
322+ {" WebSocketServer.GetClientIdByIndex" , ws_GetClientIdByIndex},
323+ {" WebSocketServer.MaxClientIdLength.get" , ws_GetMaxClientIdLength},
324324 {" WebSocketServer.DisableDeflate" , ws_DisableDeflate},
325325 {" WebSocketServer.IsDeflateEnabled" , ws_IsDeflateEnabled},
326326 {nullptr , nullptr }
0 commit comments