forked from Links2004/arduinoWebSockets
fix clients init logic
This commit is contained in:
@ -260,17 +260,21 @@ typedef struct {
|
|||||||
|
|
||||||
struct WSclient_t {
|
struct WSclient_t {
|
||||||
|
|
||||||
WSclient_t() = default;
|
WSclient_t (): status(WSC_NOT_CONNECTED)
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
uint8_t num; ///< connection number
|
||||||
|
|
||||||
WSclientsStatus_t status;
|
WSclientsStatus_t status;
|
||||||
|
@ -71,15 +71,14 @@ WebSocketsServer::~WebSocketsServer() {
|
|||||||
* called to initialize the Websocket server
|
* called to initialize the Websocket server
|
||||||
*/
|
*/
|
||||||
void WebSocketsServerCore::begin(void) {
|
void WebSocketsServerCore::begin(void) {
|
||||||
// init client storage
|
|
||||||
for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
|
|
||||||
WSclient_t * client = &_clients[i];
|
|
||||||
|
|
||||||
// reset instance:
|
// adjust clients storage:
|
||||||
// destructor in place
|
// _clients[i]'s constructor are already called,
|
||||||
client->~WSclient_t();
|
// all its members are initialized to their default value,
|
||||||
// constructor in place
|
// except the ones explicitly detailed in WSclient_t() constructor.
|
||||||
new (client) WSclient_t(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount);
|
// 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
|
#ifdef ESP8266
|
||||||
@ -98,6 +97,17 @@ void WebSocketsServerCore::begin(void) {
|
|||||||
void WebSocketsServerCore::close(void) {
|
void WebSocketsServerCore::close(void) {
|
||||||
_runnning = false;
|
_runnning = false;
|
||||||
disconnect();
|
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