14 std::function<
void(JsonDocument&)> callback,
23 pending_request->callback = callback;
27 pending_request->timeout_cleanup =
28 event_loop()->onDelay(timeout, [pending_request]() {
31 ESP_LOGW(__FILENAME__,
"No response from server for request Id %s",
32 pending_request->request_id.c_str());
33 pending_request->timeout_cleanup =
nullptr;
40 request_map_[pending_request->request_id] = pending_request;
44 request[
"requestId"] = pending_request->request_id;
47 serializeJson(request, request_txt);
48 ESP_LOGD(__FILENAME__,
"Sending websocket request to server: %s",
53 return pending_request->request_id;
59 return (iterator->second);
65 String request_id = response[
"requestId"];
68 if (pending_request !=
nullptr) {
72 String state = response[
"state"];
73 if (!state.equalsIgnoreCase(
"PENDING")) {
77 ESP_LOGW(__FILENAME__,
78 "Received request response for an untracked request: %s",
88 if (pending_request !=
nullptr) {
101 delete pending_request;
106 const String& config_path, uint32_t
timeout)
113 JsonObject root = doc.to<JsonObject>();
114 JsonObject put_data = root[
"put"].to<JsonObject>();
118 doc, [
this](JsonDocument& response) { this->
on_response(response); },
130 String request_id = response[
"requestId"];
131 String state = response[
"state"];
132 ESP_LOGD(__FILENAME__,
"Response %s received for PUT request: %s",
133 state.c_str(), request_id.c_str());
142 const String expected[] = {
"sk_path"};
143 for (
auto str : expected) {
144 if (!config[str].is<JsonVariant>()) {
148 this->
sk_path = config[
"sk_path"].as<String>();
virtual bool load() override
Load and populate the object from a persistent storage.
FileSystemSaveable(const String &config_path)
virtual void set_put_value(JsonObject &put_data)=0
SKPutRequestBase(const String &sk_path, const String &config_path="", uint32_t timeout=5000)
String pending_request_id_
virtual bool from_json(const JsonObject &config) override
virtual bool to_json(JsonObject &root) override
virtual void on_response(JsonDocument &response)
reactesp::DelayEvent * timeout_cleanup
std::function< void(JsonDocument &)> callback
static void handle_response(JsonDocument &response)
static SemaphoreHandle_t request_map_mutex_
static StaticSemaphore_t request_map_mutex_buffer_
static String send_request(JsonDocument &request, std::function< void(JsonDocument &)> callback, uint32_t timeout=5000)
static PendingRequest * get_request(String request_id)
static std::map< String, PendingRequest * > request_map_
static void remove_request(String request_id)
static std::shared_ptr< SensESPApp > get()
Get the singleton instance of the SensESPApp.
std::shared_ptr< reactesp::EventLoop > event_loop()
String generate_uuid4()
Generate a random UUIDv4 string.