Skip to content

Commit d271957

Browse files
committed
add function to send WS ping
sendPing(); #130
1 parent 0d9aa04 commit d271957

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

src/WebSocketsClient.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,24 @@ bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) {
207207
return sendBIN((uint8_t *) payload, length);
208208
}
209209

210+
/**
211+
* sends a WS ping to Server
212+
* @param payload uint8_t *
213+
* @param length size_t
214+
* @return true if ping is send out
215+
*/
216+
bool WebSocketsClient::sendPing(uint8_t * payload, size_t length) {
217+
if(clientIsConnected(&_client)) {
218+
return sendFrame(&_client, WSop_ping, payload, length);
219+
}
220+
return false;
221+
}
222+
223+
bool WebSocketsClient::sendPing(String & payload) {
224+
return sendPing((uint8_t *) payload.c_str(), payload.length());
225+
}
226+
227+
210228
/**
211229
* disconnect one client
212230
* @param num uint8_t client id

src/WebSocketsClient.h

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ class WebSocketsClient: private WebSockets {
6969
bool sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false);
7070
bool sendBIN(const uint8_t * payload, size_t length);
7171

72+
bool sendPing(uint8_t * payload = NULL, size_t length = 0);
73+
bool sendPing(String & payload);
74+
7275
void disconnect(void);
7376

7477
void setAuthorization(const char * user, const char * password);

src/WebSocketsServer.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,57 @@ bool WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) {
283283
return broadcastBIN((uint8_t *) payload, length);
284284
}
285285

286+
287+
/**
288+
* sends a WS ping to Client
289+
* @param num uint8_t client id
290+
* @param payload uint8_t *
291+
* @param length size_t
292+
* @return true if ping is send out
293+
*/
294+
bool WebSocketsServer::sendPing(uint8_t num, uint8_t * payload, size_t length) {
295+
if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) {
296+
return false;
297+
}
298+
WSclient_t * client = &_clients[num];
299+
if(clientIsConnected(client)) {
300+
return sendFrame(client, WSop_ping, payload, length);
301+
}
302+
return false;
303+
}
304+
305+
bool WebSocketsServer::sendPing(uint8_t num, String & payload) {
306+
return sendPing(num, (uint8_t *) payload.c_str(), payload.length());
307+
}
308+
309+
/**
310+
* sends a WS ping to all Client
311+
* @param payload uint8_t *
312+
* @param length size_t
313+
* @return true if ping is send out
314+
*/
315+
bool WebSocketsServer::broadcastPing(uint8_t * payload, size_t length) {
316+
WSclient_t * client;
317+
bool ret = true;
318+
for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
319+
client = &_clients[i];
320+
if(clientIsConnected(client)) {
321+
if(!sendFrame(client, WSop_ping, payload, length)) {
322+
ret = false;
323+
}
324+
}
325+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
326+
delay(0);
327+
#endif
328+
}
329+
return ret;
330+
}
331+
332+
bool WebSocketsServer::broadcastPing(String & payload) {
333+
return broadcastPing((uint8_t *) payload.c_str(), payload.length());
334+
}
335+
336+
286337
/**
287338
* disconnect all clients
288339
*/

src/WebSocketsServer.h

+6
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ class WebSocketsServer: private WebSockets {
8181
bool broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false);
8282
bool broadcastBIN(const uint8_t * payload, size_t length);
8383

84+
bool sendPing(uint8_t num, uint8_t * payload = NULL, size_t length = 0);
85+
bool sendPing(uint8_t num, String & payload);
86+
87+
bool broadcastPing(uint8_t * payload = NULL, size_t length = 0);
88+
bool broadcastPing(String & payload);
89+
8490
void disconnect(void);
8591
void disconnect(uint8_t num);
8692

0 commit comments

Comments
 (0)