diff --git a/CMakeLists.txt b/CMakeLists.txt index a87920f..899a84f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,7 @@ include_directories( SYSTEM OPENDHT_INCLUDE_DIRS) set(SRCS + src/channel.cpp src/error.cpp src/node.cpp) diff --git a/src/channel.cpp b/src/channel.cpp new file mode 100644 index 0000000..609351e --- /dev/null +++ b/src/channel.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.h" + +#include "error.hpp" +#include "globals.hpp" + +#include + +dht::DhtRunner node; +std::unordered_map chans; + +int NeoComm_join_channel(const char *channel_name) { + if(not node.isRunning()) + { + add_error("NeoComm must be initialized."); + return 0; + } + + const std::string s_chan_name(channel_name); + if(s_chan_name.empty()) + { + add_error("Chan name is empty."); + return 0; + } + + // If it already exists then just exit + if(chans.find(s_chan_name) == chans.end()) + return 1; + + dht::InfoHash chan(s_chan_name); + { + static constexpr dht::InfoHash INVALID_ID {}; + if(chan == INVALID_ID) + chan = dht::InfoHash::get(s_chan_name); + } + + chans[s_chan_name] = chan; + return 1; +} + +void NeoComm_leave_channel(const char *channel_name) { + chans.erase(std::string(channel_name)); +}