From 0ca1503e528038c31c5da3cf5efe49a4d4b2dd66 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Sat, 23 May 2015 09:20:44 +0200 Subject: [PATCH] add disconnect functions void disconnect(void); void disconnect(uint8_t num); --- src/WebSockets.h | 2 +- src/WebSocketsServer.cpp | 37 ++++++++++++++++++++++++++++++++----- src/WebSocketsServer.h | 3 +++ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/WebSockets.h b/src/WebSockets.h index e28478f..7ac49e3 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -37,7 +37,7 @@ #endif #endif -//#define DEBUG_WEBSOCKETS(...) Serial1.printf( __VA_ARGS__ ); +#define DEBUG_WEBSOCKETS(...) Serial1.printf( __VA_ARGS__ ); #ifndef DEBUG_WEBSOCKETS #define DEBUG_WEBSOCKETS(...) diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index ddf72df..3b25af4 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -63,12 +63,12 @@ void WebSocketsServer::begin(void) { _server->begin(); } +/** + * called in arduino loop + */ void WebSocketsServer::loop(void) { - handleNewClients(); - handleClientData(); - } /** @@ -183,10 +183,37 @@ void WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length) { } } -void WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) { +void WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) { broadcastBIN((uint8_t *) payload, length); } +/** + * disconnect all clients + */ +void WebSocketsServer::disconnect(void) { + WSclient_t * client; + for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { + client = &_clients[i]; + if(clientIsConnected(client)) { + WebSockets::clientDisconnect(client, 1000); + } + } +} + +/** + * disconnect one client + * @param num + */ +void WebSocketsServer::disconnect(uint8_t num) { + if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) { + return; + } + WSclient_t * client = &_clients[num]; + if(clientIsConnected(client)) { + WebSockets::clientDisconnect(client, 1000); + } +} + //################################################################################# //################################################################################# //################################################################################# @@ -422,7 +449,7 @@ void WebSocketsServer::handleHeader(WSclient_t * client) { WebSockets::sendFrame(client, WSop_ping); if(_cbEvent) { - _cbEvent(client->num, WStype_CONNECTED, (uint8_t *)client->cUrl.c_str(), client->cUrl.length()); + _cbEvent(client->num, WStype_CONNECTED, (uint8_t *) client->cUrl.c_str(), client->cUrl.length()); } } else { diff --git a/src/WebSocketsServer.h b/src/WebSocketsServer.h index 5e1951b..1132686 100644 --- a/src/WebSocketsServer.h +++ b/src/WebSocketsServer.h @@ -83,6 +83,9 @@ public: void broadcastBIN(uint8_t * payload, size_t length); void broadcastBIN(const uint8_t * payload, size_t length); + void disconnect(void); + void disconnect(uint8_t num); + private: uint16_t _port;