2828#endif
2929
3030template <class TServer , class TClient >
31- class ArduinoComptibleWiFiServerTemplate : public TServer {
31+ class ArduinoCompatibleWiFiServerTemplate : public TServer {
3232public:
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