diff --git a/src/WebSockets.h b/src/WebSockets.h index fa200b0..35d7d8c 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -260,17 +260,21 @@ typedef struct { struct WSclient_t { - WSclient_t() = default; - - WSclient_t(uint8_t num, uint32_t pingInterval, uint32_t pongTimeout, uint8_t disconnectTimeoutCount): - num(num), - status(WSC_NOT_CONNECTED), - pingInterval(pingInterval), - pongTimeout(pongTimeout), - disconnectTimeoutCount(disconnectTimeoutCount) + WSclient_t (): status(WSC_NOT_CONNECTED) { } + void init (uint8_t num, + uint32_t pingInterval, + uint32_t pongTimeout, + uint8_t disconnectTimeoutCount) + { + this->num = num; + this->pingInterval = pingInterval; + this->pongTimeout = pongTimeout; + this->disconnectTimeoutCount = disconnectTimeoutCount; + } + uint8_t num; ///< connection number WSclientsStatus_t status; diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 1b85ecb..50d92ed 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -71,15 +71,14 @@ WebSocketsServer::~WebSocketsServer() { * called to initialize the Websocket server */ void WebSocketsServerCore::begin(void) { - // init client storage - for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { - WSclient_t * client = &_clients[i]; - // reset instance: - // destructor in place - client->~WSclient_t(); - // constructor in place - new (client) WSclient_t(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount); + // adjust clients storage: + // _clients[i]'s constructor are already called, + // all its members are initialized to their default value, + // except the ones explicitly detailed in WSclient_t() constructor. + // Then we need to initialize some members to non-trivial values: + for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { + _clients[i].init(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount); } #ifdef ESP8266 @@ -98,6 +97,17 @@ void WebSocketsServerCore::begin(void) { void WebSocketsServerCore::close(void) { _runnning = false; disconnect(); + + // reset _clients[] + for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { + WSclient_t * client = &_clients[i]; + + // reset instance: + // destructor in place + client->~WSclient_t(); + // constructor in place (reset Strings, set scalars to 0) + new (client) WSclient_t; + } } /**