1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-07-18 23:03:34 +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
2 changed files with 22 additions and 13 deletions

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