fix clients init logic

This commit is contained in:
david gauchard
2020-11-22 21:42:20 +01:00
committed by Markus
parent 74411bf729
commit 52547ec47c
2 changed files with 30 additions and 16 deletions

View File

@ -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;

View File

@ -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;
}
}
/**