From d26294a58a208bf82eed2694897b5ce2338da605 Mon Sep 17 00:00:00 2001 From: Johannes Schmidt Date: Tue, 1 Jul 2025 16:30:32 +0200 Subject: [PATCH] Refactor EventsHandler to stream responses via HttpResponse::Write() --- lib/remote/eventshandler.cpp | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/lib/remote/eventshandler.cpp b/lib/remote/eventshandler.cpp index 56fce0037..b5f3aaa5f 100644 --- a/lib/remote/eventshandler.cpp +++ b/lib/remote/eventshandler.cpp @@ -98,33 +98,22 @@ bool EventsHandler::HandleRequest( EventsSubscriber subscriber (std::move(eventTypes), request.GetLastParameter("filter"), l_ApiQuery); - server.StartStreaming(); + IoBoundWorkSlot dontLockTheIoThread (yc); response.result(http::status::ok); response.set(http::field::content_type, "application/json"); + response.StartStreaming(); + response.Flush(yc); - IoBoundWorkSlot dontLockTheIoThread (yc); - - http::async_write(stream, response, yc); - stream.async_flush(yc); - - asio::const_buffer newLine ("\n", 1); + auto encoder = response.GetJsonEncoder(); for (;;) { - auto event (subscriber.GetInbox()->Shift(yc)); + auto event(subscriber.GetInbox()->Shift(yc)); if (event) { - String body = JsonEncode(event); - - boost::algorithm::replace_all(body, "\n", ""); - - asio::const_buffer payload (body.CStr(), body.GetLength()); - - asio::async_write(stream, payload, yc); - asio::async_write(stream, newLine, yc); - stream.async_flush(yc); - } else if (server.Disconnected()) { - return true; + encoder.Encode(event); + response.body() << '\n'; + response.Flush(yc); } } }