forked from Links2004/arduinoWebSockets
fix clients init logic
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user