From d2719573d44a67872bbf9bb2886f42fcd67ebfba Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Sat, 22 Oct 2016 19:47:44 +0200 Subject: [PATCH] add function to send WS ping sendPing(); #130 --- src/WebSocketsClient.cpp | 18 ++++++++++++++ src/WebSocketsClient.h | 3 +++ src/WebSocketsServer.cpp | 51 ++++++++++++++++++++++++++++++++++++++++ src/WebSocketsServer.h | 6 +++++ 4 files changed, 78 insertions(+) diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 3b93a14..9b4aad0 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -207,6 +207,24 @@ bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) { return sendBIN((uint8_t *) payload, length); } +/** + * sends a WS ping to Server + * @param payload uint8_t * + * @param length size_t + * @return true if ping is send out + */ +bool WebSocketsClient::sendPing(uint8_t * payload, size_t length) { + if(clientIsConnected(&_client)) { + return sendFrame(&_client, WSop_ping, payload, length); + } + return false; +} + +bool WebSocketsClient::sendPing(String & payload) { + return sendPing((uint8_t *) payload.c_str(), payload.length()); +} + + /** * disconnect one client * @param num uint8_t client id diff --git a/src/WebSocketsClient.h b/src/WebSocketsClient.h index 2a8bc3e..bae1777 100644 --- a/src/WebSocketsClient.h +++ b/src/WebSocketsClient.h @@ -69,6 +69,9 @@ class WebSocketsClient: private WebSockets { bool sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false); bool sendBIN(const uint8_t * payload, size_t length); + bool sendPing(uint8_t * payload = NULL, size_t length = 0); + bool sendPing(String & payload); + void disconnect(void); void setAuthorization(const char * user, const char * password); diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 53641d2..c2262f6 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -283,6 +283,57 @@ bool WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) { return broadcastBIN((uint8_t *) payload, length); } + +/** + * sends a WS ping to Client + * @param num uint8_t client id + * @param payload uint8_t * + * @param length size_t + * @return true if ping is send out + */ +bool WebSocketsServer::sendPing(uint8_t num, uint8_t * payload, size_t length) { + if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) { + return false; + } + WSclient_t * client = &_clients[num]; + if(clientIsConnected(client)) { + return sendFrame(client, WSop_ping, payload, length); + } + return false; +} + +bool WebSocketsServer::sendPing(uint8_t num, String & payload) { + return sendPing(num, (uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sends a WS ping to all Client + * @param payload uint8_t * + * @param length size_t + * @return true if ping is send out + */ +bool WebSocketsServer::broadcastPing(uint8_t * payload, size_t length) { + WSclient_t * client; + bool ret = true; + for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { + client = &_clients[i]; + if(clientIsConnected(client)) { + if(!sendFrame(client, WSop_ping, payload, length)) { + ret = false; + } + } +#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) + delay(0); +#endif + } + return ret; +} + +bool WebSocketsServer::broadcastPing(String & payload) { + return broadcastPing((uint8_t *) payload.c_str(), payload.length()); +} + + /** * disconnect all clients */ diff --git a/src/WebSocketsServer.h b/src/WebSocketsServer.h index 7a93c0e..f6acee5 100644 --- a/src/WebSocketsServer.h +++ b/src/WebSocketsServer.h @@ -81,6 +81,12 @@ public: bool broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false); bool broadcastBIN(const uint8_t * payload, size_t length); + bool sendPing(uint8_t num, uint8_t * payload = NULL, size_t length = 0); + bool sendPing(uint8_t num, String & payload); + + bool broadcastPing(uint8_t * payload = NULL, size_t length = 0); + bool broadcastPing(String & payload); + void disconnect(void); void disconnect(uint8_t num);