1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-13 13:01:55 +03:00

Web server refactoring

This commit is contained in:
Ivan Grokhotkov
2015-05-14 13:33:12 +03:00
parent eb37830238
commit 36d0968ada
5 changed files with 574 additions and 507 deletions

View File

@ -25,6 +25,7 @@
#include "Print.h"
#include "Client.h"
#include "IPAddress.h"
#include <memory>
class ClientContext;
class WiFiServer;
@ -44,6 +45,9 @@ public:
virtual int connect(const char *host, uint16_t port);
virtual size_t write(uint8_t);
virtual size_t write(const uint8_t *buf, size_t size);
template <typename T>
size_t write(T& source, size_t unitSize);
virtual int available();
virtual int read();
virtual int read(uint8_t *buf, size_t size);
@ -72,4 +76,24 @@ private:
};
template <typename T>
inline size_t WiFiClient::write(T& source, size_t unitSize) {
std::unique_ptr<uint8_t[]> buffer(new uint8_t[unitSize]);
size_t size_sent = 0;
while(true) {
size_t left = source.available();
if (!left)
break;
size_t will_send = (left < unitSize) ? left : unitSize;
source.read(buffer.get(), will_send);
size_t cb = write(buffer.get(), will_send);
size_sent += cb;
if (cb != will_send) {
break;
}
}
return size_sent;
}
#endif