@@ -375,8 +375,7 @@ bool WebSockets::handleWebsocketWaitFor(WSclient_t * client, size_t size) {
375375 // timeout or error
376376 server->clientDisconnect (client, 1002 );
377377 }
378- },
379- this , size, std::placeholders::_1, std::placeholders::_2));
378+ }, this , size, std::placeholders::_1, std::placeholders::_2));
380379 return false ;
381380}
382381
@@ -459,7 +458,12 @@ void WebSockets::handleWebsocketCb(WSclient_t * client) {
459458 clientDisconnect (client, 1011 );
460459 return ;
461460 }
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+ });
463467 } else {
464468 handleWebsocketPayloadCb (client, true , NULL );
465469 }
@@ -676,32 +680,32 @@ size_t WebSockets::write(WSclient_t * client, uint8_t * out, size_t n) {
676680 unsigned long t = millis ();
677681 size_t len = 0 ;
678682 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);
680684 while (n > 0 ) {
681685 if (client->tcp == NULL ) {
682686 DEBUG_WEBSOCKETS (" [write] tcp is null!\n " );
683687 break ;
684688 }
685689
686690 if (!client->tcp ->connected ()) {
687- DEBUG_WEBSOCKETS (" [write] not connected!\n " );
691+ DEBUG_WEBSOCKETS (" [write][%d] not connected!\n " , client-> num );
688692 break ;
689693 }
690694
691695 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));
693697 break ;
694698 }
695699
696700 len = client->tcp ->write ((const uint8_t *)out, n);
697701 if (len) {
698- t = millis ();
702+ t = millis (); // why restart time?
699703 out += len;
700704 n -= len;
701705 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 () );
703707 } 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 () );
705709 }
706710 if (n > 0 ) {
707711 WEBSOCKETS_YIELD ();
@@ -740,17 +744,18 @@ void WebSockets::enableHeartbeat(WSclient_t * client, uint32_t pingInterval, uin
740744 * @param client WSclient_t *
741745 */
742746void 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
744748 uint32_t pi = millis () - client->lastPing ;
745749
746750 if (client->pongReceived ) {
747751 client->pongTimeoutCount = 0 ;
748752 } else {
749753 if (pi > client->pongTimeout ) { // pong not received in time
750754 client->pongTimeoutCount ++;
751- client->lastPing = millis () - client->pingInterval - 500 ; // force ping on the next run
752755
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
754759
755760 if (client->disconnectTimeoutCount && client->pongTimeoutCount >= client->disconnectTimeoutCount ) {
756761 DEBUG_WEBSOCKETS (" [HBtimeout] count=%d, DISCONNECTING\n " , client->pongTimeoutCount );
0 commit comments