Browse Source

try to pop alerts from torrent session

master
Jørgen Lien Sellæg 9 years ago
parent
commit
13de341ce8
  1. 5
      toREST/include/ws.hpp
  2. 28
      toREST/src/main.cxx

5
toREST/include/ws.hpp

@ -4,6 +4,7 @@
#include <boost/system/error_code.hpp>
#include <iostream>
#include <util.hpp>
#include <thread>
namespace tr {
namespace ws {
@ -24,9 +25,7 @@ void on_close(Session &session, Connection con, int status, const std::string &r
template <class Server, class Session, class Connection>
void on_open(Server &server, Session &session, Connection con) {
if (!session.is_valid()) {
server.send_close(con, status::unexpected, "Session not valid");
}
}
template <class Session, class Connection, class Message>

28
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<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;

Loading…
Cancel
Save