Skip to content

Commit 3feea52

Browse files
committed
Fix for failing to connect to an EmonCMS server (at the socket level) after ArduinoMongoose API change
1 parent 77aebaa commit 3feea52

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/emoncms.cpp

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,19 @@ const char *post_path = "/input/post?";
2323

2424
static MongooseHttpClient client;
2525

26+
struct EmonCmsClientState {
27+
bool connected;
28+
};
29+
2630
static void emoncms_result(bool success, String message)
2731
{
2832
StaticJsonDocument<128> event;
2933

34+
if(emoncms_connected && success) {
35+
// Don't send events if we have already reported success
36+
return;
37+
}
38+
3039
emoncms_connected = success;
3140
event["emoncms_connected"] = (int)emoncms_connected;
3241
event["emoncms_message"] = message.substring(0, 64);
@@ -54,11 +63,17 @@ void emoncms_publish(JsonDocument &data)
5463
DBUGVAR(url);
5564
packets_sent++;
5665

57-
client.get(url, [](MongooseHttpClientResponse *response)
66+
auto state = new EmonCmsClientState;
67+
68+
state->connected = false;
69+
70+
client.get(url, [state](MongooseHttpClientResponse *response)
5871
{
5972
MongooseString result = response->body();
6073
DBUGF("result = %.*s", result.length(), result.c_str());
6174

75+
state->connected = true;
76+
6277
const size_t capacity = JSON_OBJECT_SIZE(2) + result.length();
6378
DynamicJsonDocument doc(capacity);
6479
if(DeserializationError::Code::Ok == deserializeJson(doc, result.c_str(), result.length()))
@@ -77,12 +92,13 @@ void emoncms_publish(JsonDocument &data)
7792
DEBUG.printf("%.*s\n", result.length(), (const char *)result);
7893
emoncms_result(false, result.toString());
7994
}
80-
}, []()
95+
}, [state]()
8196
{
82-
//DBUGF("onClose %p", response);
83-
//if(NULL == response) {
84-
// emoncms_result(false, String("Failed to connect"));
85-
//}
97+
DBUGF("onClose");
98+
if(false == state->connected) {
99+
emoncms_result(false, String("Failed to connect"));
100+
}
101+
delete state;
86102
});
87103
} else {
88104
if(false != emoncms_connected) {

0 commit comments

Comments
 (0)