|
|
|
|
@ -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<WsServer::Connection> 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<libtorrent::alert *> alerts; |
|
|
|
|
session.pop_alerts(&alerts); |
|
|
|
|
for (auto alert : alerts) { |
|
|
|
|
alert->message(); |
|
|
|
|
for (auto &c : connections) { |
|
|
|
|
auto message_stream = std::make_shared<WsServer::SendStream>(); |
|
|
|
|
*message_stream << nlohmann::json({{"type",alert->message()}}); |
|
|
|
|
ws_server.send(c, message_stream); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
end_point.on_message = [&](std::shared_ptr<WsServer::Connection> connection, std::shared_ptr<WsServer::Message> 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; |
|
|
|
|
|