mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-07 16:23:38 +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
|
Pager Server
|
||||||
|
|
||||||
The ESP8266WiFi library's WiFiServer and WiFiServerSecure
|
The ESP8266WiFi library's WiFiServer and WiFiServerSecure
|
||||||
work differently then WiFiServer and EthernetSever
|
work differently than WiFiServer and EthernetSever
|
||||||
in Arduino networking libraries.
|
in Arduino networking libraries.
|
||||||
This example demonstrates the ArduinoWiFiServer,
|
This example demonstrates the ArduinoWiFiServer,
|
||||||
which enhances the WiFiServer.
|
which enhances the WiFiServer.
|
||||||
|
@ -28,12 +28,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class TServer, class TClient>
|
template <class TServer, class TClient>
|
||||||
class ArduinoComptibleWiFiServerTemplate : public TServer {
|
class ArduinoCompatibleWiFiServerTemplate : public TServer {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ArduinoComptibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {}
|
ArduinoCompatibleWiFiServerTemplate(const IPAddress& addr, uint16_t port) : TServer(addr, port) {}
|
||||||
ArduinoComptibleWiFiServerTemplate(uint16_t port) : TServer(port) {}
|
ArduinoCompatibleWiFiServerTemplate(uint16_t port) : TServer(port) {}
|
||||||
virtual ~ArduinoComptibleWiFiServerTemplate() {}
|
virtual ~ArduinoCompatibleWiFiServerTemplate() {}
|
||||||
|
|
||||||
// https://www.arduino.cc/en/Reference/EthernetServerAccept
|
// https://www.arduino.cc/en/Reference/EthernetServerAccept
|
||||||
TClient accept() {
|
TClient accept() {
|
||||||
@ -43,12 +43,8 @@ public:
|
|||||||
// https://www.arduino.cc/en/Reference/WiFiServerAvailable
|
// https://www.arduino.cc/en/Reference/WiFiServerAvailable
|
||||||
TClient available() {
|
TClient available() {
|
||||||
|
|
||||||
// update connected clients
|
acceptClients();
|
||||||
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
|
|
||||||
if (!connectedClients[i]) {
|
|
||||||
connectedClients[i] = accept();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// find next client with data available
|
// find next client with data available
|
||||||
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
|
for (uint8_t i = 0; i < MAX_MONITORED_CLIENTS; i++) {
|
||||||
if (index == MAX_MONITORED_CLIENTS) {
|
if (index == MAX_MONITORED_CLIENTS) {
|
||||||
@ -67,6 +63,12 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual size_t write(const uint8_t *buf, size_t size) override {
|
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)
|
if (size == 0)
|
||||||
return 0;
|
return 0;
|
||||||
size_t ret = 0;
|
size_t ret = 0;
|
||||||
@ -127,9 +129,16 @@ private:
|
|||||||
TClient connectedClients[MAX_MONITORED_CLIENTS];
|
TClient connectedClients[MAX_MONITORED_CLIENTS];
|
||||||
uint8_t index = 0;
|
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 ArduinoCompatibleWiFiServerTemplate<WiFiServer, WiFiClient> ArduinoWiFiServer;
|
||||||
typedef ArduinoComptibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
|
typedef ArduinoCompatibleWiFiServerTemplate<WiFiServerSecure, WiFiClientSecure> ArduinoWiFiServerSecure;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user