Skip to content

Commit

Permalink
WiFi library ArduinoWiFiServer update (#8238)
Browse files Browse the repository at this point in the history
* ArduinoWiFiServer - check for clients in write() too
  • Loading branch information
JAndrassy committed Sep 22, 2021
1 parent 612e7ff commit 64e87f1
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 13 deletions.
2 changes: 1 addition & 1 deletion libraries/ESP8266WiFi/examples/PagerServer/PagerServer.ino
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
33 changes: 21 additions & 12 deletions libraries/ESP8266WiFi/src/ArduinoWiFiServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -43,12 +43,8 @@ class ArduinoComptibleWiFiServerTemplate : public TServer {
// 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) {
Expand All @@ -67,6 +63,12 @@ class ArduinoComptibleWiFiServerTemplate : public TServer {
}

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;
Expand Down Expand Up @@ -127,9 +129,16 @@ class ArduinoComptibleWiFiServerTemplate : public TServer {
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

0 comments on commit 64e87f1

Please sign in to comment.