add events for ping / pong rx #382

This commit is contained in:
Links
2019-05-30 20:15:03 +02:00
parent df3ef524b6
commit 0aa07421a6
5 changed files with 25 additions and 7 deletions

View File

@ -45,6 +45,14 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
// send data to server // send data to server
// webSocket.sendBIN(payload, length); // webSocket.sendBIN(payload, length);
break; 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;
} }
} }

View File

@ -435,10 +435,12 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t
// send pong back // send pong back
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] ping received (%s)\n", client->num, payload ? (const char*)payload : ""); DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] ping received (%s)\n", client->num, payload ? (const char*)payload : "");
sendFrame(client, WSop_pong, payload, header->payloadLen); sendFrame(client, WSop_pong, payload, header->payloadLen);
messageReceived(client, header->opCode, payload, header->payloadLen, header->fin);
break; break;
case WSop_pong: case WSop_pong:
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : ""); DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : "");
client->pongReceived = true; client->pongReceived = true;
messageReceived(client, header->opCode, payload, header->payloadLen, header->fin);
break; break;
case WSop_close: { case WSop_close: {
#ifndef NODEBUG_WEBSOCKETS #ifndef NODEBUG_WEBSOCKETS
@ -667,7 +669,7 @@ void WebSockets::enableHeartbeat(WSclient_t * client, uint32_t pingInterval, uin
client->pingInterval = pingInterval; client->pingInterval = pingInterval;
client->pongTimeout = pongTimeout; client->pongTimeout = pongTimeout;
client->disconnectTimeoutCount = disconnectTimeoutCount; client->disconnectTimeoutCount = disconnectTimeoutCount;
client->pongReceived = false;
} }
/** /**
@ -693,7 +695,5 @@ void WebSockets::handleHBTimeout(WSclient_t * client){
} }
} }
} }
} }
} }

View File

@ -197,6 +197,8 @@ typedef enum {
WStype_FRAGMENT_BIN_START, WStype_FRAGMENT_BIN_START,
WStype_FRAGMENT, WStype_FRAGMENT,
WStype_FRAGMENT_FIN, WStype_FRAGMENT_FIN,
WStype_PING,
WStype_PONG,
} WStype_t; } WStype_t;
typedef enum { typedef enum {

View File

@ -371,9 +371,13 @@ void WebSocketsClient::messageReceived(WSclient_t * client, WSopcode_t opcode, u
case WSop_continuation: case WSop_continuation:
type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT; type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT;
break; break;
case WSop_close:
case WSop_ping: case WSop_ping:
type = WStype_PING;
break;
case WSop_pong: case WSop_pong:
type = WStype_PONG;
break;
case WSop_close:
default: default:
break; break;
} }

View File

@ -518,9 +518,13 @@ void WebSocketsServer::messageReceived(WSclient_t * client, WSopcode_t opcode, u
case WSop_continuation: case WSop_continuation:
type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT; type = fin ? WStype_FRAGMENT_FIN : WStype_FRAGMENT;
break; break;
case WSop_close:
case WSop_ping: case WSop_ping:
type = WStype_PING;
break;
case WSop_pong: case WSop_pong:
type = WStype_PONG;
break;
case WSop_close:
default: default:
break; break;
} }