some more work on outputting as stream from the loop

This commit is contained in:
Me No Dev
2016-01-21 10:29:38 +02:00
parent 36853c9122
commit 41846249ec
4 changed files with 19 additions and 0 deletions

View File

@@ -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_ */

View File

@@ -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_ */

View File

@@ -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);
} }

View File

@@ -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));
} }