mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-06 05:21:22 +03:00
WiFi library ArduinoWiFiServer update (#8238)
* ArduinoWiFiServer - check for clients in write() too
This commit is contained in:
parent
612e7ffd7f
commit
64e87f1149
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user