diff --git a/lib/remote/eventshandler.cpp b/lib/remote/eventshandler.cpp index ea8db7bb7..d8160d9fe 100644 --- a/lib/remote/eventshandler.cpp +++ b/lib/remote/eventshandler.cpp @@ -98,32 +98,23 @@ bool EventsHandler::HandleRequest( EventsSubscriber subscriber (std::move(eventTypes), request.GetLastParameter("filter"), l_ApiQuery); - server.StartStreaming(); - response.result(http::status::ok); response.set(http::field::content_type, "application/json"); + response.StartStreaming(); IoBoundWorkSlot dontLockTheIoThread (yc); - http::async_write(stream, response, yc); - stream.async_flush(yc); - - asio::const_buffer newLine ("\n", 1); + auto writer = std::make_shared>(response); + JsonEncoder encoder(writer); 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()) { + if (event && response.IsWritable()) { + encoder.Encode(event); + response.body() << '\n'; + response.Write(yc); + } else { return true; } }