@@ -375,8 +375,7 @@ bool WebSockets::handleWebsocketWaitFor(WSclient_t * client, size_t size) {
375
375
// timeout or error
376
376
server->clientDisconnect (client, 1002 );
377
377
}
378
- },
379
- this , size, std::placeholders::_1, std::placeholders::_2));
378
+ }, this , size, std::placeholders::_1, std::placeholders::_2));
380
379
return false ;
381
380
}
382
381
@@ -459,7 +458,12 @@ void WebSockets::handleWebsocketCb(WSclient_t * client) {
459
458
clientDisconnect (client, 1011 );
460
459
return ;
461
460
}
462
- readCb (client, payload, header->payloadLen , std::bind (&WebSockets::handleWebsocketPayloadCb, this , std::placeholders::_1, std::placeholders::_2, payload));
461
+ // readCb(client, payload, header->payloadLen, std::bind(&WebSockets::handleWebsocketPayloadCb, this, std::placeholders::_1, std::placeholders::_2, payload));
462
+ // todo this is because the original arguments don't match
463
+ readCb (client, payload, header->payloadLen , [this , payload](WSclient_t * client, bool ok) {
464
+ // Call the original method with the additional `payload` argument
465
+ this ->handleWebsocketPayloadCb (client, ok, payload);
466
+ });
463
467
} else {
464
468
handleWebsocketPayloadCb (client, true , NULL );
465
469
}
@@ -676,32 +680,32 @@ size_t WebSockets::write(WSclient_t * client, uint8_t * out, size_t n) {
676
680
unsigned long t = millis ();
677
681
size_t len = 0 ;
678
682
size_t total = 0 ;
679
- DEBUG_WEBSOCKETS (" [write] n: %zu t: %lu\n " , n, t);
683
+ DEBUG_WEBSOCKETS (" [write][%d] n: %zu t: %lu\n " , client-> num , n, t);
680
684
while (n > 0 ) {
681
685
if (client->tcp == NULL ) {
682
686
DEBUG_WEBSOCKETS (" [write] tcp is null!\n " );
683
687
break ;
684
688
}
685
689
686
690
if (!client->tcp ->connected ()) {
687
- DEBUG_WEBSOCKETS (" [write] not connected!\n " );
691
+ DEBUG_WEBSOCKETS (" [write][%d] not connected!\n " , client-> num );
688
692
break ;
689
693
}
690
694
691
695
if ((millis () - t) > WEBSOCKETS_TCP_TIMEOUT) {
692
- DEBUG_WEBSOCKETS (" [write] write TIMEOUT! %lu\n " , (millis () - t));
696
+ DEBUG_WEBSOCKETS (" [write][%d] write TIMEOUT! %lu\n " , client-> num , (millis () - t));
693
697
break ;
694
698
}
695
699
696
700
len = client->tcp ->write ((const uint8_t *)out, n);
697
701
if (len) {
698
- t = millis ();
702
+ t = millis (); // why restart time?
699
703
out += len;
700
704
n -= len;
701
705
total += len;
702
- // DEBUG_WEBSOCKETS("write %d left %d! \n", len, n);
706
+ DEBUG_WEBSOCKETS (" WS[ write] normal sent: %d, left: %d, t: %lu \n " , len, n, millis () );
703
707
} else {
704
- DEBUG_WEBSOCKETS (" WS write %d failed left %d! \n " , len, n);
708
+ DEBUG_WEBSOCKETS (" WS [ write][%d] error sent: %d, left: %d, %lu \n " , client-> num , len, n, millis () );
705
709
}
706
710
if (n > 0 ) {
707
711
WEBSOCKETS_YIELD ();
@@ -740,17 +744,18 @@ void WebSockets::enableHeartbeat(WSclient_t * client, uint32_t pingInterval, uin
740
744
* @param client WSclient_t *
741
745
*/
742
746
void WebSockets::handleHBTimeout (WSclient_t * client) {
743
- if (client->pingInterval ) { // if heartbeat is enabled
747
+ if ( ( client->pingInterval ) && (client-> status == WSC_CONNECTED)) { // if heartbeat is enabled and connected
744
748
uint32_t pi = millis () - client->lastPing ;
745
749
746
750
if (client->pongReceived ) {
747
751
client->pongTimeoutCount = 0 ;
748
752
} else {
749
753
if (pi > client->pongTimeout ) { // pong not received in time
750
754
client->pongTimeoutCount ++;
751
- client->lastPing = millis () - client->pingInterval - 500 ; // force ping on the next run
752
755
753
- DEBUG_WEBSOCKETS (" [HBtimeout] pong TIMEOUT! lp=%d millis=%lu pi=%d count=%d\n " , client->lastPing , millis (), pi, client->pongTimeoutCount );
756
+ DEBUG_WEBSOCKETS (" [HBtimeout][%d] pong TIMEOUT! lp=%d millis=%lu pi=%d count=%d\n " , client->num , client->lastPing , millis (), pi, client->pongTimeoutCount );
757
+
758
+ client->lastPing = millis () - client->pingInterval - 500 ; // give 500ms and force ping next run
754
759
755
760
if (client->disconnectTimeoutCount && client->pongTimeoutCount >= client->disconnectTimeoutCount ) {
756
761
DEBUG_WEBSOCKETS (" [HBtimeout] count=%d, DISCONNECTING\n " , client->pongTimeoutCount );
0 commit comments