#ifndef WEB_SERVER_H #define WEB_SERVER_H #include "EspLink.h" typedef enum { BUTTON_PRESS, SET_FIELD, REFRESH, LOAD, } WebServerCommand; typedef void (*WebServerCallback)(WebServerCommand command, char * data, int dataLen); typedef struct { const char * PROGMEM url; WebServerCallback callback; } WebMethod; typedef enum { WS_LOAD=0, WS_REFRESH, WS_BUTTON, WS_SUBMIT, } RequestReason; typedef enum { WEB_STRING=0, WEB_NULL, WEB_INTEGER, WEB_BOOLEAN, WEB_FLOAT, WEB_JSON } WebValueType; class WebServer { friend void webServerCallback(CmdRequest *req); private: const WebMethod * PROGMEM methods; Stream &stream; static WebServer * instance; void invokeMethod(RequestReason reason, WebMethod * method, CmdRequest *req); void handleRequest(CmdRequest *req); uint8_t remote_ip[4]; uint16_t remote_port; char * value_ptr; uint32_t last_connect_ts; CmdRequestCB esplink_cb; protected: EspLink espLink; public: WebServer(Stream &stream, const WebMethod * PROGMEM methods); void init(); void loop(); void registerCallback(); void setEspLinkCallback(CmdRequestCB cb) { esplink_cb = cb; } static WebServer * getInstance() { return instance; } uint8_t * getRemoteIp() { return remote_ip; } uint16_t getRemotePort() { return remote_port; } void setArgInt(const char * name, int32_t value); void setArgJson(const char * name, const char * value); void setArgString(const char * name, const char * value); void setArgStringP(const char * name, const char * value); void setArgBoolean(const char * name, uint8_t value); int32_t getArgInt(); char * getArgString(); uint8_t getArgBoolean(); EspLink * getEspLink() { return &espLink; } }; #endif /* WEB_SERVER_H */