Kademlia based p2p network.
P2P requires to compile:
$ git clone https://github.com/SychevS/p2p.git $ cd p2p $ git submodule update --init --recursive $ mkdir build $ cd build $ cmake -DBOOST_ROOT=${BOOST_ROOT} -DCMAKE_INSTALL_PREFIX=${P2P_INSTALL_ROOT} .. $ cmake --build . --target installLets suppose that we are going to connect only two nodes.
First node:
#include <p2p_network.h> using namespace net; NodeId GenerateRandomId(); NodeId GetFirstNodeId(); NodeId GetSecondNodeId(); void StartMainEventLoop(); class Host : public EventHandler { void OnNodeDiscovered(const NodeId&) { std::cout << "Node discovered" << std::endl; } void OnNodeRemoved(const NodeId&) {} void OnMessageReceived(const NodeId& from, ByteVector&& message) {} void OnFragmentFound(const FragmentId&, ByteVector&& value) {} void OnFragmentNotFound(const FragmentId& id) {} FragmentId GetFragmentId(const ByteVector& fragment) { return GenerateRandomId(); } }; int main() { net::ManagerConfig config { GetFirstNodeId(), 6100, {{GetSecondNodeId(), "127.0.0.1", 6101}}, false }; Host host; Manager netman(config, host); netman.Start(); StartMainEventLoop(); }Main of second node:
int main() { net::ManagerConfig config { GetSecondNodeId(), 6101, {{GetFirstNodeId(), "127.0.0.1", 6100}}, false }; Host host; Manager netman(config, host); netman.Start(); StartMainEventLoop(); }Now after discovery these two nodes will be able to communicate with each other using Manager's class interface. For more details see include/p2p_network.h