@@ -171,6 +171,21 @@ static cell_t ws_SendMessageToClient(IPluginContext *pContext, const cell_t *par
171171 return pWebsocketServer->sendToClient (clientId, msg);
172172}
173173
174+ static cell_t ws_DisconnectClient (IPluginContext *pContext, const cell_t *params)
175+ {
176+ WebSocketServer* pWebsocketServer = GetWsServerPointer (pContext, params[1 ]);
177+
178+ if (!pWebsocketServer)
179+ {
180+ return 0 ;
181+ }
182+
183+ char *clientId;
184+ pContext->LocalToString (params[2 ], &clientId);
185+
186+ return pWebsocketServer->disconnectClient (clientId);
187+ }
188+
174189static cell_t ws_BroadcastMessage (IPluginContext *pContext, const cell_t *params)
175190{
176191 WebSocketServer* pWebsocketServer = GetWsServerPointer (pContext, params[1 ]);
@@ -250,8 +265,44 @@ static cell_t ws_IsDeflateEnabled(IPluginContext *pContext, const cell_t *params
250265
251266static cell_t ws_GetClients (IPluginContext *pContext, const cell_t *params)
252267{
253- // TODO: Implement
254- return 1 ;
268+ WebSocketServer *pWebsocketServer = GetWsServerPointer (pContext, params[1 ]);
269+
270+ if (!pWebsocketServer)
271+ {
272+ return 0 ;
273+ }
274+
275+ cell_t *outputArray;
276+ pContext->LocalToPhysAddr (params[2 ], &outputArray);
277+ cell_t maxSize = params[3 ];
278+
279+ auto clients = pWebsocketServer->m_webSocketServer .getClients ();
280+ size_t count = 0 ;
281+
282+ HandleSecurity sec (nullptr , myself->GetIdentity ());
283+
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+ }
304+
305+ return count;
255306}
256307
257308const sp_nativeinfo_t ws_natives_server[] =
@@ -265,6 +316,7 @@ const sp_nativeinfo_t ws_natives_server[] =
265316 {" WebSocketServer.Stop" , ws_Stop},
266317 {" WebSocketServer.BroadcastMessage" , ws_BroadcastMessage},
267318 {" WebSocketServer.SendMessageToClient" , ws_SendMessageToClient},
319+ {" WebSocketServer.DisconnectClient" , ws_DisconnectClient},
268320 {" WebSocketServer.ClientsCount.get" , ws_GetClientsCount},
269321 {" WebSocketServer.EnablePong.get" , ws_SetOrGetPongEnable},
270322 {" WebSocketServer.EnablePong.set" , ws_SetOrGetPongEnable},
0 commit comments