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