Skip to content

Commit 64e87f1

Browse files
authored
WiFi library ArduinoWiFiServer update (#8238)
* ArduinoWiFiServer - check for clients in write() too
1 parent 612e7ff commit 64e87f1

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

libraries/ESP8266WiFi/examples/PagerServer/PagerServer.ino

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Pager Server
33
44
The ESP8266WiFi library's WiFiServer and WiFiServerSecure
5-
work differently then WiFiServer and EthernetSever
5+
work differently than WiFiServer and EthernetSever
66
in Arduino networking libraries.
77
This example demonstrates the ArduinoWiFiServer,
88
which enhances the WiFiServer.

libraries/ESP8266WiFi/src/ArduinoWiFiServer.h

+21-12
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
#endif
2929

3030
template <class TServer, class TClient>
31-
class ArduinoComptibleWiFiServerTemplate : public TServer {
31+
class ArduinoCompatibleWiFiServerTemplate : public TServer {
3232
public:
3333

34-
ArduinoComptibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {}
35-
ArduinoComptibleWiFiServerTemplate(uint16_t port) : TServer(port) {}
36-
virtual ~ArduinoComptibleWiFiServerTemplate() {}
34+
ArduinoCompatibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {}
35+
ArduinoCompatibleWiFiServerTemplate(uint16_t port) : TServer(port) {}
36+
virtual ~ArduinoCompatibleWiFiServerTemplate() {}
3737

3838
// https://www.arduino.cc/en/Reference/EthernetServerAccept
3939
TClient accept() {
@@ -43,12 +43,8 @@ class ArduinoComptibleWiFiServerTemplate : public TServer {
4343
// https://www.arduino.cc/en/Reference/WiFiServerAvailable
4444
TClient available() {
4545

46-
// update connected clients
47-
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
48-
if (!connectedClients[i]) {
49-
connectedClients[i] = accept();
50-
}
51-
}
46+
acceptClients();
47+
5248
// find next client with data available
5349
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
5450
if (index == MAX_MONITORED_CLIENTS) {
@@ -67,6 +63,12 @@ class ArduinoComptibleWiFiServerTemplate : public TServer {
6763
}
6864

6965
virtual size_t write(const uint8_t *buf, size_t size) override {
66+
static uint32_t lastCheck;
67+
uint32_t m = millis();
68+
if (m - lastCheck > 100) {
69+
lastCheck = m;
70+
acceptClients();
71+
}
7072
if (size == 0)
7173
return 0;
7274
size_t ret = 0;
@@ -127,9 +129,16 @@ class ArduinoComptibleWiFiServerTemplate : public TServer {
127129
TClient connectedClients[MAX_MONITORED_CLIENTS];
128130
uint8_t index = 0;
129131

132+
void acceptClients() {
133+
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
134+
if (!connectedClients[i]) {
135+
connectedClients[i] = accept();
136+
}
137+
}
138+
}
130139
};
131140

132-
typedef ArduinoComptibleWiFiServerTemplate<WiFiServer, WiFiClient> ArduinoWiFiServer;
133-
typedef ArduinoComptibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
141+
typedef ArduinoCompatibleWiFiServerTemplate<WiFiServer, WiFiClient> ArduinoWiFiServer;
142+
typedef ArduinoCompatibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
134143

135144
#endif

0 commit comments

Comments
 (0)