Skip to content

Commit 0aa0742

Browse files
committed
add events for ping / pong rx #382
1 parent df3ef52 commit 0aa0742

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

examples/esp8266/WebSocketClient/WebSocketClient.ino

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,15 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
4545
// send data to server
4646
// webSocket.sendBIN(payload, length);
4747
break;
48-
}
48+
case WStype_PING:
49+
// pong will be send automatically
50+
USE_SERIAL.printf("[WSc] get ping\n");
51+
break;
52+
case WStype_PONG:
53+
// answer to a ping we send
54+
USE_SERIAL.printf("[WSc] get pong\n");
55+
break;
56+
}
4957

5058
}
5159

src/WebSockets.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,10 +435,12 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t
435435
// send pong back
436436
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] ping received (%s)\n", client->num, payload ? (const char*)payload : "");
437437
sendFrame(client, WSop_pong, payload, header->payloadLen);
438+
messageReceived(client, header->opCode, payload, header->payloadLen, header->fin);
438439
break;
439440
case WSop_pong:
440441
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : "");
441442
client->pongReceived = true;
443+
messageReceived(client, header->opCode, payload, header->payloadLen, header->fin);
442444
break;
443445
case WSop_close: {
444446
#ifndef NODEBUG_WEBSOCKETS
@@ -667,7 +669,7 @@ void WebSockets::enableHeartbeat(WSclient_t * client, uint32_t pingInterval, uin
667669
client->pingInterval = pingInterval;
668670
client->pongTimeout = pongTimeout;
669671
client->disconnectTimeoutCount = disconnectTimeoutCount;
670-
672+
client->pongReceived = false;
671673
}
672674

673675
/**
@@ -693,7 +695,5 @@ void WebSockets::handleHBTimeout(WSclient_t * client){
693695
}
694696
}
695697
}
696-
697698
}
698-
699-
}
699+
}

src/WebSockets.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ typedef enum {
197197
WStype_FRAGMENT_BIN_START,
198198
WStype_FRAGMENT,
199199
WStype_FRAGMENT_FIN,
200+
WStype_PING,
201+
WStype_PONG,
200202
} WStype_t;
201203

202204
typedef enum {

src/WebSocketsClient.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,9 +371,13 @@ void WebSocketsClient::messageReceived(WSclient_t * client, WSopcode_t opcode, u
371371
case WSop_continuation:
372372
type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT;
373373
break;
374-
case WSop_close:
375374
case WSop_ping:
375+
type = WStype_PING;
376+
break;
376377
case WSop_pong:
378+
type = WStype_PONG;
379+
break;
380+
case WSop_close:
377381
default:
378382
break;
379383
}

src/WebSocketsServer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,9 +518,13 @@ void WebSocketsServer::messageReceived(WSclient_t * client, WSopcode_t opcode, u
518518
case WSop_continuation:
519519
type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT;
520520
break;
521-
case WSop_close:
522521
case WSop_ping:
522+
type = WStype_PING;
523+
break;
523524
case WSop_pong:
525+
type = WStype_PONG;
526+
break;
527+
case WSop_close:
524528
default:
525529
break;
526530
}

0 commit comments

Comments
 (0)