diff --git a/examples/esp8266/WebSocketClient/WebSocketClient.ino b/examples/esp8266/WebSocketClient/WebSocketClient.ino index 86fc241..67aa383 100644 --- a/examples/esp8266/WebSocketClient/WebSocketClient.ino +++ b/examples/esp8266/WebSocketClient/WebSocketClient.ino @@ -45,7 +45,15 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { // send data to server // webSocket.sendBIN(payload, length); break; - } + case WStype_PING: + // pong will be send automatically + USE_SERIAL.printf("[WSc] get ping\n"); + break; + case WStype_PONG: + // answer to a ping we send + USE_SERIAL.printf("[WSc] get pong\n"); + break; + } } diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index fc4a6ba..0f57922 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -435,10 +435,12 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t // send pong back DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] ping received (%s)\n", client->num, payload ? (const char*)payload : ""); sendFrame(client, WSop_pong, payload, header->payloadLen); + messageReceived(client, header->opCode, payload, header->payloadLen, header->fin); break; case WSop_pong: DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : ""); client->pongReceived = true; + messageReceived(client, header->opCode, payload, header->payloadLen, header->fin); break; case WSop_close: { #ifndef NODEBUG_WEBSOCKETS @@ -667,7 +669,7 @@ void WebSockets::enableHeartbeat(WSclient_t * client, uint32_t pingInterval, uin client->pingInterval = pingInterval; client->pongTimeout = pongTimeout; client->disconnectTimeoutCount = disconnectTimeoutCount; - + client->pongReceived = false; } /** @@ -693,7 +695,5 @@ void WebSockets::handleHBTimeout(WSclient_t * client){ } } } - } - -} \ No newline at end of file +} diff --git a/src/WebSockets.h b/src/WebSockets.h index 5951023..65a9484 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -197,6 +197,8 @@ typedef enum { WStype_FRAGMENT_BIN_START, WStype_FRAGMENT, WStype_FRAGMENT_FIN, + WStype_PING, + WStype_PONG, } WStype_t; typedef enum { diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 4fe5b1b..6887641 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -371,9 +371,13 @@ void WebSocketsClient::messageReceived(WSclient_t * client, WSopcode_t opcode, u case WSop_continuation: type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT; break; - case WSop_close: case WSop_ping: + type = WStype_PING; + break; case WSop_pong: + type = WStype_PONG; + break; + case WSop_close: default: break; } diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 2918fe4..a6492c0 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -518,9 +518,13 @@ void WebSocketsServer::messageReceived(WSclient_t * client, WSopcode_t opcode, u case WSop_continuation: type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT; break; - case WSop_close: case WSop_ping: + type = WStype_PING; + break; case WSop_pong: + type = WStype_PONG; + break; + case WSop_close: default: break; }