json res_json = result->to_json();
if (res_json.is_array()) {
for (const auto & res : res_json) {
- if (!server_sent_event(sink, "data", res)) {
+ if (!server_sent_event(sink, res)) {
// sending failed (HTTP connection closed), cancel the generation
return false;
}
}
return true;
} else {
- return server_sent_event(sink, "data", res_json);
+ return server_sent_event(sink, res_json);
}
}, [&](const json & error_data) {
- server_sent_event(sink, "error", error_data);
+ server_sent_event(sink, json{{"error", error_data}});
}, [&sink]() {
// note: do not use req.is_connection_closed here because req is already destroyed
return !sink.is_writable();
return out;
}
-static bool server_sent_event(httplib::DataSink & sink, const char * event, const json & data) {
+static bool server_sent_event(httplib::DataSink & sink, const json & data) {
const std::string str =
- std::string(event) + ": " +
+ "data: " +
data.dump(-1, ' ', false, json::error_handler_t::replace) +
"\n\n"; // required by RFC 8895 - A message is terminated by a blank line (two line terminators in a row).