forked from me-no-dev/ESPAsyncWebServer
some more work on outputting as stream from the loop
This commit is contained in:
@@ -67,6 +67,7 @@ class AsyncResponseStream: public AsyncAbstractResponse, public Print {
|
|||||||
size_t _fillBuffer(uint8_t *buf, size_t maxLen);
|
size_t _fillBuffer(uint8_t *buf, size_t maxLen);
|
||||||
size_t write(const uint8_t *data, size_t len);
|
size_t write(const uint8_t *data, size_t len);
|
||||||
size_t write(uint8_t data);
|
size_t write(uint8_t data);
|
||||||
|
using Print::write;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* ASYNCWEBSERVERRESPONSEIMPL_H_ */
|
#endif /* ASYNCWEBSERVERRESPONSEIMPL_H_ */
|
||||||
|
@@ -15,6 +15,7 @@ class AsyncWebServerResponse;
|
|||||||
class AsyncWebHeader;
|
class AsyncWebHeader;
|
||||||
class AsyncWebParameter;
|
class AsyncWebParameter;
|
||||||
class AsyncWebHandler;
|
class AsyncWebHandler;
|
||||||
|
class AsyncResponseStream;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_DELETE, HTTP_PUT, HTTP_PATCH, HTTP_HEAD, HTTP_OPTIONS
|
HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_DELETE, HTTP_PUT, HTTP_PATCH, HTTP_HEAD, HTTP_OPTIONS
|
||||||
@@ -136,6 +137,7 @@ class AsyncWebServerRequest {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
File _tempFile;
|
File _tempFile;
|
||||||
|
AsyncWebServerRequest *next;
|
||||||
|
|
||||||
AsyncWebServerRequest(AsyncWebServer*, AsyncClient*);
|
AsyncWebServerRequest(AsyncWebServer*, AsyncClient*);
|
||||||
~AsyncWebServerRequest();
|
~AsyncWebServerRequest();
|
||||||
@@ -165,6 +167,7 @@ class AsyncWebServerRequest {
|
|||||||
AsyncWebServerResponse *beginResponse(FS &fs, String path, String contentType=String(), bool download=false);
|
AsyncWebServerResponse *beginResponse(FS &fs, String path, String contentType=String(), bool download=false);
|
||||||
AsyncWebServerResponse *beginResponse(Stream &stream, String contentType, size_t len);
|
AsyncWebServerResponse *beginResponse(Stream &stream, String contentType, size_t len);
|
||||||
AsyncWebServerResponse *beginResponse(String contentType, size_t len, AwsResponseFiller callback);
|
AsyncWebServerResponse *beginResponse(String contentType, size_t len, AwsResponseFiller callback);
|
||||||
|
AsyncResponseStream *getResponseStream(String contentType, size_t len);
|
||||||
|
|
||||||
int headers(); // get header count
|
int headers(); // get header count
|
||||||
bool hasHeader(String name);
|
bool hasHeader(String name);
|
||||||
@@ -270,5 +273,6 @@ class AsyncWebServer {
|
|||||||
void _handleRequest(AsyncWebServerRequest *request);
|
void _handleRequest(AsyncWebServerRequest *request);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#include "AsyncWebServerResponseImpl.h"
|
||||||
|
|
||||||
#endif /* _AsyncWebServer_H_ */
|
#endif /* _AsyncWebServer_H_ */
|
||||||
|
@@ -354,14 +354,21 @@ AsyncResponseStream::~AsyncResponseStream(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t AsyncResponseStream::_fillBuffer(uint8_t *buf, size_t maxLen){
|
size_t AsyncResponseStream::_fillBuffer(uint8_t *buf, size_t maxLen){
|
||||||
|
os_printf("fb:%u\n",maxLen);
|
||||||
return _content->read((char*)buf, maxLen);
|
return _content->read((char*)buf, maxLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t AsyncResponseStream::write(const uint8_t *data, size_t len){
|
size_t AsyncResponseStream::write(const uint8_t *data, size_t len){
|
||||||
|
if(_finished())
|
||||||
|
return 0;
|
||||||
|
//while(_content->room() < len) delay(1);
|
||||||
return _content->write((const char*)data, len);
|
return _content->write((const char*)data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t AsyncResponseStream::write(uint8_t data){
|
size_t AsyncResponseStream::write(uint8_t data){
|
||||||
|
if(_finished())
|
||||||
|
return 0;
|
||||||
|
//while(_content->room() == 0) delay(1);
|
||||||
return write(&data, 1);
|
return write(&data, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,6 +45,7 @@ AsyncWebServerRequest::AsyncWebServerRequest(AsyncWebServer* s, AsyncClient* c)
|
|||||||
, _itemBuffer(0)
|
, _itemBuffer(0)
|
||||||
, _itemBufferIndex(0)
|
, _itemBufferIndex(0)
|
||||||
, _itemIsFile(false)
|
, _itemIsFile(false)
|
||||||
|
, next(NULL)
|
||||||
{
|
{
|
||||||
c->onError([](void *r, AsyncClient* c, int8_t error){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onError(error); }, this);
|
c->onError([](void *r, AsyncClient* c, int8_t error){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onError(error); }, this);
|
||||||
c->onAck([](void *r, AsyncClient* c, size_t len, uint32_t time){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onAck(len, time); }, this);
|
c->onAck([](void *r, AsyncClient* c, size_t len, uint32_t time){ AsyncWebServerRequest *req = (AsyncWebServerRequest*)r; req->_onAck(len, time); }, this);
|
||||||
@@ -611,6 +612,12 @@ AsyncWebServerResponse * AsyncWebServerRequest::beginResponse(String contentType
|
|||||||
return new AsyncCallbackResponse(contentType, len, callback);
|
return new AsyncCallbackResponse(contentType, len, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AsyncResponseStream * AsyncWebServerRequest::getResponseStream(String contentType, size_t len){
|
||||||
|
AsyncResponseStream * r = new AsyncResponseStream(contentType, len);
|
||||||
|
send(r);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
void AsyncWebServerRequest::send(int code, String contentType, String content){
|
void AsyncWebServerRequest::send(int code, String contentType, String content){
|
||||||
send(new AsyncBasicResponse(code, contentType, content));
|
send(new AsyncBasicResponse(code, contentType, content));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user