/* * Copyright (C) 2018 Ortega Froysa, Nicolás * Author: Ortega Froysa, Nicolás * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include "neocomm/node.hpp" using namespace neocomm; node::node(unsigned short port) { // TODO: see about preserving an identity network.run(port, dht::crypto::generateIdentity(), true); } node::~node() { network.join(); } void node::join_channel(const std::string &name) { if(get_channel(name)) return; channels[name].key = dht::InfoHash::get(name); channels[name].token = network.listen( channels[name].key, [&](std::string &&msg) { channels[name].messages.push_back(msg); return true; }); } void node::leave_channel(const std::string &name) { if(!get_channel(name)) return; network.cancelListen(channels[name].key, channels[name].token.get()); channels.erase(name); }