1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-06 05:21:22 +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
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.

View File

@ -28,12 +28,12 @@
#endif
template <class TServer, class TClient>
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<WiFiServer, WiFiClient> ArduinoWiFiServer;
typedef ArduinoComptibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
typedef ArduinoCompatibleWiFiServerTemplate<WiFiServer, WiFiClient> ArduinoWiFiServer;
typedef ArduinoCompatibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
#endif