diff --git a/toREST/include/ws.hpp b/toREST/include/ws.hpp index cf72b64..246fc18 100644 --- a/toREST/include/ws.hpp +++ b/toREST/include/ws.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace tr { namespace ws { @@ -24,9 +25,7 @@ void on_close(Session &session, Connection con, int status, const std::string &r template void on_open(Server &server, Session &session, Connection con) { - if (!session.is_valid()) { - server.send_close(con, status::unexpected, "Session not valid"); - } + } template diff --git a/toREST/src/main.cxx b/toREST/src/main.cxx index 327c5ec..715dce7 100644 --- a/toREST/src/main.cxx +++ b/toREST/src/main.cxx @@ -70,9 +70,31 @@ int main(int argc, char *argv[]) { }; auto &end_point = ws_server.endpoint["^/session"]; + std::thread message_service; end_point.on_open = [&](std::shared_ptr connection) { - tr::ws::on_open(ws_server, session, connection); + // tr::ws::on_open(ws_server, session, connection, session_thread); + if (!session.is_valid()) { + ws_server.send_close(connection, 1011, "Session not valid"); + } else { + if (!message_service.joinable()) { + message_service = std::thread([&]() { + auto connections = end_point.get_connections(); + while (connections.begin() != connections.end()) { + std::vector alerts; + session.pop_alerts(&alerts); + for (auto alert : alerts) { + alert->message(); + for (auto &c : connections) { + auto message_stream = std::make_shared(); + *message_stream << nlohmann::json({{"type",alert->message()}}); + ws_server.send(c, message_stream); + } + } + } + }); + } + } }; end_point.on_message = [&](std::shared_ptr connection, std::shared_ptr message) { @@ -123,6 +145,10 @@ int main(int argc, char *argv[]) { auto session_proxy = session.abort(); } + if (message_service.joinable()) { + message_service.join(); + } + std::cout << "the torrent session was stopped." << std::endl; return 0;