1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-07 16:23:38 +03:00

WiFi library ArduinoWiFiServer update (#8238)

* ArduinoWiFiServer - check for clients in write() too
This commit is contained in:
Juraj Andrássy 2021-09-22 19:31:07 +02:00 committed by GitHub
parent 612e7ffd7f
commit 64e87f1149
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 13 deletions

View File

@ -2,7 +2,7 @@
Pager Server Pager Server
The ESP8266WiFi library's WiFiServer and WiFiServerSecure The ESP8266WiFi library's WiFiServer and WiFiServerSecure
work differently then WiFiServer and EthernetSever work differently than WiFiServer and EthernetSever
in Arduino networking libraries. in Arduino networking libraries.
This example demonstrates the ArduinoWiFiServer, This example demonstrates the ArduinoWiFiServer,
which enhances the WiFiServer. which enhances the WiFiServer.

View File

@ -28,12 +28,12 @@
#endif #endif
template <class TServer, class TClient> template <class TServer, class TClient>
class ArduinoComptibleWiFiServerTemplate : public TServer { class ArduinoCompatibleWiFiServerTemplate : public TServer {
public: public:
ArduinoComptibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {} ArduinoCompatibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {}
ArduinoComptibleWiFiServerTemplate(uint16_t port) : TServer(port) {} ArduinoCompatibleWiFiServerTemplate(uint16_t port) : TServer(port) {}
virtual ~ArduinoComptibleWiFiServerTemplate() {} virtual ~ArduinoCompatibleWiFiServerTemplate() {}
// https://www.arduino.cc/en/Reference/EthernetServerAccept // https://www.arduino.cc/en/Reference/EthernetServerAccept
TClient accept() { TClient accept() {
@ -43,12 +43,8 @@ public:
// https://www.arduino.cc/en/Reference/WiFiServerAvailable // https://www.arduino.cc/en/Reference/WiFiServerAvailable
TClient available() { TClient available() {
// update connected clients acceptClients();
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
if (!connectedClients[i]) {
connectedClients[i] = accept();
}
}
// find next client with data available // find next client with data available
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) { for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
if (index == MAX_MONITORED_CLIENTS) { if (index == MAX_MONITORED_CLIENTS) {
@ -67,6 +63,12 @@ public:
} }
virtual size_t write(const uint8_t *buf, size_t size) override { 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) if (size == 0)
return 0; return 0;
size_t ret = 0; size_t ret = 0;
@ -127,9 +129,16 @@ private:
TClient connectedClients[MAX_MONITORED_CLIENTS]; TClient connectedClients[MAX_MONITORED_CLIENTS];
uint8_t index = 0; uint8_t index = 0;
void acceptClients() {
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
if (!connectedClients[i]) {
connectedClients[i] = accept();
}
}
}
}; };
typedef ArduinoComptibleWiFiServerTemplate<WiFiServer, WiFiClient> ArduinoWiFiServer; typedef ArduinoCompatibleWiFiServerTemplate<WiFiServer, WiFiClient> ArduinoWiFiServer;
typedef ArduinoComptibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure; typedef ArduinoCompatibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
#endif #endif