From dbca2ab420076ff86fa2f1ab0324e9e10169bd3a Mon Sep 17 00:00:00 2001 From: Links Date: Mon, 10 Jun 2019 14:57:49 +0200 Subject: [PATCH] SocketIO message RX is working --- src/SocketIOclient.cpp | 18 ++++++++++++++++-- src/SocketIOclient.h | 23 ++++++++++++++++++----- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/SocketIOclient.cpp b/src/SocketIOclient.cpp index 3609583..3d51568 100644 --- a/src/SocketIOclient.cpp +++ b/src/SocketIOclient.cpp @@ -17,10 +17,20 @@ SocketIOclient::~SocketIOclient() { void SocketIOclient::begin(const char * host, uint16_t port, const char * url, const char * protocol) { WebSocketsClient::beginSocketIO(host, port, url, protocol); + WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); } void SocketIOclient::begin(String host, uint16_t port, String url, String protocol) { WebSocketsClient::beginSocketIO(host, port, url, protocol); + WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); +} + +/** + * set callback function + * @param cbEvent SocketIOclientEvent + */ +void SocketIOclient::onEvent(SocketIOclientEvent cbEvent) { + _cbEvent = cbEvent; } bool SocketIOclient::isConnected(void) { @@ -83,13 +93,15 @@ void SocketIOclient::loop(void) { unsigned long t = millis(); if((t - _lastConnectionFail) > EIO_HEARTBEAT_INTERVAL) { _lastConnectionFail = t; - //WebSocketsClient::sendTXT(eIOtype_PING); + DEBUG_WEBSOCKETS("[wsIOc] send ping\n"); + WebSocketsClient::sendTXT(eIOtype_PING); } } -void SocketIOclient::runCbEvent(WStype_t type, uint8_t * payload, size_t length) { +void SocketIOclient::handleCbEvent(WStype_t type, uint8_t * payload, size_t length) { switch(type) { case WStype_DISCONNECTED: + runIOCbEvent(sIOtype_DISCONNECT, NULL, 0); DEBUG_WEBSOCKETS("[wsIOc] Disconnected!\n"); break; case WStype_CONNECTED: { @@ -97,6 +109,7 @@ void SocketIOclient::runCbEvent(WStype_t type, uint8_t * payload, size_t length) // send message to server when Connected // Engine.io upgrade confirmation message (required) WebSocketsClient::sendTXT(eIOtype_UPGRADE); + runIOCbEvent(sIOtype_CONNECT, payload, length); } break; case WStype_TEXT: { if(length < 1) { @@ -136,6 +149,7 @@ void SocketIOclient::runCbEvent(WStype_t type, uint8_t * payload, size_t length) break; } + runIOCbEvent(ioType, data, lData); } break; case eIOtype_OPEN: case eIOtype_CLOSE: diff --git a/src/SocketIOclient.h b/src/SocketIOclient.h index 785d038..64b8c87 100644 --- a/src/SocketIOclient.h +++ b/src/SocketIOclient.h @@ -1,4 +1,4 @@ -/* +/** * SocketIOclient.h * * Created on: May 12, 2018 @@ -10,7 +10,7 @@ #include "WebSockets.h" -#define EIO_HEARTBEAT_INTERVAL 10000 +#define EIO_HEARTBEAT_INTERVAL 20000 #define EIO_MAX_HEADER_SIZE (WEBSOCKETS_MAX_HEADER_SIZE + 1) #define SIO_MAX_HEADER_SIZE (EIO_MAX_HEADER_SIZE + 1) @@ -38,9 +38,9 @@ typedef enum { class SocketIOclient : protected WebSocketsClient { public: #ifdef __AVR__ - typedef void (*SocketIOclientEvent)(WStype_t type, uint8_t * payload, size_t length); + typedef void (*SocketIOclientEvent)(socketIOmessageType_t type, uint8_t * payload, size_t length); #else - typedef std::function SocketIOclientEvent; + typedef std::function SocketIOclientEvent; #endif SocketIOclient(void); @@ -51,6 +51,8 @@ class SocketIOclient : protected WebSocketsClient { bool isConnected(void); + void onEvent(SocketIOclientEvent cbEvent); + bool sendEVENT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); bool sendEVENT(const uint8_t * payload, size_t length = 0); bool sendEVENT(char * payload, size_t length = 0, bool headerToPayload = false); @@ -60,8 +62,19 @@ class SocketIOclient : protected WebSocketsClient { void loop(void); protected: - void runCbEvent(WStype_t type, uint8_t * payload, size_t length); uint64_t _lastHeartbeat = 0; + SocketIOclientEvent _cbEvent; + virtual void runIOCbEvent(socketIOmessageType_t type, uint8_t * payload, size_t length) { + if(_cbEvent) { + _cbEvent(type, payload, length); + } + } + + // Handeling events from websocket layer + virtual void runCbEvent(WStype_t type, uint8_t * payload, size_t length) { + handleCbEvent(type, payload, length); + } + void handleCbEvent(WStype_t type, uint8_t * payload, size_t length); }; #endif /* SOCKETIOCLIENT_H_ */