diff --git a/libraries/ESP8266WiFi/examples/PagerServer/PagerServer.ino b/libraries/ESP8266WiFi/examples/PagerServer/PagerServer.ino index 05fa597ab..43f8fe981 100644 --- a/libraries/ESP8266WiFi/examples/PagerServer/PagerServer.ino +++ b/libraries/ESP8266WiFi/examples/PagerServer/PagerServer.ino @@ -2,7 +2,7 @@ Pager Server The ESP8266WiFi library's WiFiServer and WiFiServerSecure - work differently then WiFiServer and EthernetSever + work differently than WiFiServer and EthernetSever in Arduino networking libraries. This example demonstrates the ArduinoWiFiServer, which enhances the WiFiServer. diff --git a/libraries/ESP8266WiFi/src/ArduinoWiFiServer.h b/libraries/ESP8266WiFi/src/ArduinoWiFiServer.h index 31b8ea0c1..53e373610 100644 --- a/libraries/ESP8266WiFi/src/ArduinoWiFiServer.h +++ b/libraries/ESP8266WiFi/src/ArduinoWiFiServer.h @@ -28,12 +28,12 @@ #endif template -class ArduinoComptibleWiFiServerTemplate : public TServer { +class ArduinoCompatibleWiFiServerTemplate : public TServer { public: - ArduinoComptibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {} - ArduinoComptibleWiFiServerTemplate(uint16_t port) : TServer(port) {} - virtual ~ArduinoComptibleWiFiServerTemplate() {} + ArduinoCompatibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {} + ArduinoCompatibleWiFiServerTemplate(uint16_t port) : TServer(port) {} + virtual ~ArduinoCompatibleWiFiServerTemplate() {} // https://www.arduino.cc/en/Reference/EthernetServerAccept TClient accept() { @@ -43,12 +43,8 @@ public: // https://www.arduino.cc/en/Reference/WiFiServerAvailable TClient available() { - // update connected clients - for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) { - if (!connectedClients[i]) { - connectedClients[i] = accept(); - } - } + acceptClients(); + // find next client with data available for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) { if (index == MAX_MONITORED_CLIENTS) { @@ -67,6 +63,12 @@ public: } virtual size_t write(const uint8_t *buf, size_t size) override { + static uint32_t lastCheck; + uint32_t m = millis(); + if (m - lastCheck > 100) { + lastCheck = m; + acceptClients(); + } if (size == 0) return 0; size_t ret = 0; @@ -127,9 +129,16 @@ private: TClient connectedClients[MAX_MONITORED_CLIENTS]; uint8_t index = 0; + void acceptClients() { + for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) { + if (!connectedClients[i]) { + connectedClients[i] = accept(); + } + } + } }; -typedef ArduinoComptibleWiFiServerTemplate ArduinoWiFiServer; -typedef ArduinoComptibleWiFiServerTemplate ArduinoWiFiServerSecure; +typedef ArduinoCompatibleWiFiServerTemplate ArduinoWiFiServer; +typedef ArduinoCompatibleWiFiServerTemplate ArduinoWiFiServerSecure; #endif