8000 use native contructor and destructor to initialize WSclient_t · samuko-things/arduinoWebSockets@74411bf · GitHub
[go: up one dir, main page]

Skip to content

Commit 74411bf

Browse files
d-a-vLinks2004
authored andcommitted
use native contructor and destructor to initialize WSclient_t
1 parent f0cc36d commit 74411bf

File tree

3 files changed

+24
-44
lines changed

3 files changed

+24
-44
lines changed

src/WebSockets.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,19 @@ typedef struct {
258258
uint8_t * maskKey;
259259
} WSMessageHeader_t;
260260

261-
typedef struct {
261+
struct WSclient_t {
262+
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)
271+
{
272+
}
273+
262274
uint8_t num; ///< connection number
263275

264276
WSclientsStatus_t status;
@@ -309,7 +321,7 @@ typedef struct {
309321
String cHttpLine; ///< HTTP header lines
310322
#endif
311323

312-
} WSclient_t;
324+
};
313325

314326
class WebSockets {
315327
protected:

src/WebSockets4WebServer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class WebSockets4WebServer : public WebSocketsServerCore {
4141
onEvent(event);
4242

4343
return [&, wsRootDir](const String & method, const String & url, WiFiClient * tcpClient, ESP8266WebServer::ContentTypeFunction contentType) {
44+
(void)contentType;
45+
4446
if(!(method == "GET" && url.indexOf(wsRootDir) == 0)) {
4547
return ESP8266WebServer::CLIENT_REQUEST_CAN_CONTINUE;
4648
}

src/WebSocketsServer.cpp

Lines changed: 8 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ WebSocketsServerCore::WebSocketsServerCore(const String & origin, const String &
3838
_httpHeaderValidationFunc = NULL;
3939
_mandatoryHttpHeaders = NULL;
4040
_mandatoryHttpHeaderCount = 0;
41-
42-
memset(&_clients[0], 0x00, (sizeof(WSclient_t) * WEBSOCKETS_SERVER_CLIENT_MAX));
4341
}
4442

4543
WebSocketsServer::WebSocketsServer(uint16_t port, const String & origin, const String & protocol)
@@ -73,47 +71,15 @@ WebSocketsServer::~WebSocketsServer() {
7371
* called to initialize the Websocket server
7472
*/
7573
void WebSocketsServerCore::begin(void) {
76-
WSclient_t * client;
77-
7874
// init client storage
79-
for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
80-
client = &_clients[i];
81-
82-
client->num = i;
83-
client->status = WSC_NOT_CONNECTED;
84-
client->tcp = NULL;
85-
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
86-
client->isSSL = false;
87-
client->ssl = NULL;
88-
#endif
89-
client->cUrl = "";
90-
client->cCode = 0;
91-
92-
client->cIsClient = false;
93-
client->cIsUpgrade = false;
94-
client->cIsWebsocket = false;
95-
96-
client->cSessionId = "";
97-
client->cKey = "";
98-
client->cAccept = "";
99-
client->cProtocol = "";
100-
client->cExtensions = "";
101-
client->cVersion = 0;
102-
103-
client->cWsRXsize = 0;
104-
105-
client->base64Authorization = "";
106-
client->plainAuthorization = "";
107-
108-
client->extraHeaders = "";
109-
110-
#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
111-
client->cHttpLine = "";
112-
#endif
113-
114-
client->pingInterval = _pingInterval;
115-
client->pongTimeout = _pongTimeout;
116-
client->disconnectTimeoutCount = _disconnectTimeoutCount;
75+
for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
76+
WSclient_t * client = &_clients[i];
77+
78+
// reset instance:
79+
// destructor in place
80+
client->~WSclient_t();
81+
// constructor in place
82+
new (client) WSclient_t(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount);
11783
}
11884

11985
#ifdef ESP8266

0 commit comments

Comments
 (0)
0