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