From ea8e81c6ced4d44679c6c1ad39a0ea2f9d3e2197 Mon Sep 17 00:00:00 2001 From: Links Date: Thu, 10 May 2018 18:55:23 +0200 Subject: [PATCH] add close #322 --- src/WebSocketsServer.cpp | 32 +++++++++++++++++++++----------- src/WebSocketsServer.h | 3 +++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 1e60f97..4a841c2 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -29,6 +29,7 @@ WebSocketsServer::WebSocketsServer(uint16_t port, String origin, String protocol _port = port; _origin = origin; _protocol = protocol; + _runnning = false; _server = new WEBSOCKETS_NETWORK_SERVER_CLASS(port); @@ -50,15 +51,7 @@ WebSocketsServer::WebSocketsServer(uint16_t port, String origin, String protocol WebSocketsServer::~WebSocketsServer() { // disconnect all clients - disconnect(); - -#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) - _server->close(); -#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) - _server->end(); -#else - // TODO how to close server? -#endif + close(); if (_mandatoryHttpHeaders) delete[] _mandatoryHttpHeaders; @@ -110,18 +103,35 @@ void WebSocketsServer::begin(void) { randomSeed(millis()); #endif + _runnning = true; _server->begin(); DEBUG_WEBSOCKETS("[WS-Server] Server Started.\n"); } +void WebSocketsServer::close(void) { + _runnning = false; + disconnect(); + +#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) + _server->close(); +#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) + _server->end(); +#else + // TODO how to close server? +#endif + +} + #if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) /** * called in arduino loop */ void WebSocketsServer::loop(void) { - handleNewClients(); - handleClientData(); + if(_runnning) { + handleNewClients(); + handleClientData(); + } } #endif diff --git a/src/WebSocketsServer.h b/src/WebSocketsServer.h index 538b585..a8dcf6e 100644 --- a/src/WebSocketsServer.h +++ b/src/WebSocketsServer.h @@ -49,6 +49,7 @@ public: virtual ~WebSocketsServer(void); void begin(void); + void close(void); #if (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) void loop(void); @@ -113,6 +114,8 @@ protected: WebSocketServerEvent _cbEvent; WebSocketServerHttpHeaderValFunc _httpHeaderValidationFunc; + bool _runnning; + bool newClient(WEBSOCKETS_NETWORK_CLASS * TCPclient); void messageReceived(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool fin);