Skip to content

Commit 52547ec

Browse files
d-a-vLinks2004
authored andcommitted
fix clients init logic
1 parent 74411bf commit 52547ec

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

src/WebSockets.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,17 +260,21 @@ typedef struct {
260260

261261
struct WSclient_t {
262262

263-
WSclient_t() = default;
264-
265-
WSclient_t(uint8_t num, uint32_t pingInterval, uint32_t pongTimeout, uint8_t disconnectTimeoutCount):
266-
num(num),
267-
status(WSC_NOT_CONNECTED),
268-
pingInterval(pingInterval),
269-
pongTimeout(pongTimeout),
270-
disconnectTimeoutCount(disconnectTimeoutCount)
263+
WSclient_t (): status(WSC_NOT_CONNECTED)
271264
{
272265
}
273266

267+
void init (uint8_t num,
268+
uint32_t pingInterval,
269+
uint32_t pongTimeout,
270+
uint8_t disconnectTimeoutCount)
271+
{
272+
this->num = num;
273+
this->pingInterval = pingInterval;
274+
this->pongTimeout = pongTimeout;
275+
this->disconnectTimeoutCount = disconnectTimeoutCount;
276+
}
277+
274278
uint8_t num; ///< connection number
275279

276280
WSclientsStatus_t status;

src/WebSocketsServer.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,14 @@ WebSocketsServer::~WebSocketsServer() {
7171
* called to initialize the Websocket server
7272
*/
7373
void WebSocketsServerCore::begin(void) {
74-
// init client storage
75-
for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
76-
WSclient_t * client = &_clients[i];
7774

78-
// reset instance:
79-
// destructor in place
80-
client->~WSclient_t();
81-
// constructor in place
82-
new (client) WSclient_t(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount);
75+
// adjust clients storage:
76+
// _clients[i]'s constructor are already called,
77+
// all its members are initialized to their default value,
78+
// except the ones explicitly detailed in WSclient_t() constructor.
79+
// Then we need to initialize some members to non-trivial values:
80+
for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
81+
_clients[i].init(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount);
8382
}
8483

8584
#ifdef ESP8266
@@ -98,6 +97,17 @@ void WebSocketsServerCore::begin(void) {
9897
void WebSocketsServerCore::close(void) {
9998
_runnning = false;
10099
disconnect();
100+
101+
// reset _clients[]
102+
for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
103+
WSclient_t * client = &_clients[i];
104+
105+
// reset instance:
106+
// destructor in place
107+
client->~WSclient_t();
108+
// constructor in place (reset Strings, set scalars to 0)
109+
new (client) WSclient_t;
110+
}
101111
}
102112

103113
/**

0 commit comments

Comments
 (0)