SocketIO message RX is working

This commit is contained in:
Links
2019-06-10 14:57:49 +02:00
parent dfa35fa9ae
commit dbca2ab420
2 changed files with 34 additions and 7 deletions

View File

@ -17,10 +17,20 @@ SocketIOclient::~SocketIOclient() {
void SocketIOclient::begin(const char * host, uint16_t port, const char * url, const char * protocol) { void SocketIOclient::begin(const char * host, uint16_t port, const char * url, const char * protocol) {
WebSocketsClient::beginSocketIO(host, port, url, 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) { void SocketIOclient::begin(String host, uint16_t port, String url, String protocol) {
WebSocketsClient::beginSocketIO(host, port, url, 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) { bool SocketIOclient::isConnected(void) {
@ -83,13 +93,15 @@ void SocketIOclient::loop(void) {
unsigned long t = millis(); unsigned long t = millis();
if((t - _lastConnectionFail) > EIO_HEARTBEAT_INTERVAL) { if((t - _lastConnectionFail) > EIO_HEARTBEAT_INTERVAL) {
_lastConnectionFail = t; _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) { switch(type) {
case WStype_DISCONNECTED: case WStype_DISCONNECTED:
runIOCbEvent(sIOtype_DISCONNECT, NULL, 0);
DEBUG_WEBSOCKETS("[wsIOc] Disconnected!\n"); DEBUG_WEBSOCKETS("[wsIOc] Disconnected!\n");
break; break;
case WStype_CONNECTED: { 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 // send message to server when Connected
// Engine.io upgrade confirmation message (required) // Engine.io upgrade confirmation message (required)
WebSocketsClient::sendTXT(eIOtype_UPGRADE); WebSocketsClient::sendTXT(eIOtype_UPGRADE);
runIOCbEvent(sIOtype_CONNECT, payload, length);
} break; } break;
case WStype_TEXT: { case WStype_TEXT: {
if(length < 1) { if(length < 1) {
@ -136,6 +149,7 @@ void SocketIOclient::runCbEvent(WStype_t type, uint8_t * payload, size_t length)
break; break;
} }
runIOCbEvent(ioType, data, lData);
} break; } break;
case eIOtype_OPEN: case eIOtype_OPEN:
case eIOtype_CLOSE: case eIOtype_CLOSE:

View File

@ -1,4 +1,4 @@
/* /**
* SocketIOclient.h * SocketIOclient.h
* *
* Created on: May 12, 2018 * Created on: May 12, 2018
@ -10,7 +10,7 @@
#include "WebSockets.h" #include "WebSockets.h"
#define EIO_HEARTBEAT_INTERVAL 10000 #define EIO_HEARTBEAT_INTERVAL 20000
#define EIO_MAX_HEADER_SIZE (WEBSOCKETS_MAX_HEADER_SIZE + 1) #define EIO_MAX_HEADER_SIZE (WEBSOCKETS_MAX_HEADER_SIZE + 1)
#define SIO_MAX_HEADER_SIZE (EIO_MAX_HEADER_SIZE + 1) #define SIO_MAX_HEADER_SIZE (EIO_MAX_HEADER_SIZE + 1)
@ -38,9 +38,9 @@ typedef enum {
class SocketIOclient : protected WebSocketsClient { class SocketIOclient : protected WebSocketsClient {
public: public:
#ifdef __AVR__ #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 #else
typedef std::function<void(WStype_t type, uint8_t * payload, size_t length)> SocketIOclientEvent; typedef std::function<void(socketIOmessageType_t type, uint8_t * payload, size_t length)> SocketIOclientEvent;
#endif #endif
SocketIOclient(void); SocketIOclient(void);
@ -51,6 +51,8 @@ class SocketIOclient : protected WebSocketsClient {
bool isConnected(void); bool isConnected(void);
void onEvent(SocketIOclientEvent cbEvent);
bool sendEVENT(uint8_t * payload, size_t length = 0, bool headerToPayload = false); bool sendEVENT(uint8_t * payload, size_t length = 0, bool headerToPayload = false);
bool sendEVENT(const uint8_t * payload, size_t length = 0); bool sendEVENT(const uint8_t * payload, size_t length = 0);
bool sendEVENT(char * payload, size_t length = 0, bool headerToPayload = false); bool sendEVENT(char * payload, size_t length = 0, bool headerToPayload = false);
@ -60,8 +62,19 @@ class SocketIOclient : protected WebSocketsClient {
void loop(void); void loop(void);
protected: protected:
void runCbEvent(WStype_t type, uint8_t * payload, size_t length);
uint64_t _lastHeartbeat = 0; 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_ */ #endif /* SOCKETIOCLIENT_H_ */