clboss/Boss/Mod/all.cpp
2020-09-12 19:45:37 +08:00

97 lines
2.6 KiB
C++

#include"Boss/Mod/BlockTracker.hpp"
#include"Boss/Mod/ChannelFinderByPopularity.hpp"
#include"Boss/Mod/ConnectFinderByDns.hpp"
#include"Boss/Mod/ConnectFinderByHardcode.hpp"
#include"Boss/Mod/Connector.hpp"
#include"Boss/Mod/CommandReceiver.hpp"
#include"Boss/Mod/InitialConnect.hpp"
#include"Boss/Mod/Initiator.hpp"
#include"Boss/Mod/JsonOutputter.hpp"
#include"Boss/Mod/ListpeersAnnouncer.hpp"
#include"Boss/Mod/Manifester.hpp"
#include"Boss/Mod/NeedsConnectSolicitor.hpp"
#include"Boss/Mod/OnchainFeeMonitor.hpp"
#include"Boss/Mod/Reconnector.hpp"
#include"Boss/Mod/Timers.hpp"
#include"Boss/Mod/Waiter.hpp"
#include"Boss/Mod/all.hpp"
#include"Boss/Msg/Init.hpp"
#include"Boss/Msg/Manifestation.hpp"
#include"Boss/Msg/ManifestNotification.hpp"
#include"Boss/Msg/SolicitChannelCandidates.hpp"
#include"Boss/concurrent.hpp"
#include"S/Bus.hpp"
#include<vector>
namespace {
class All {
private:
std::vector<std::shared_ptr<void>> modules;
public:
template<typename M, typename... As>
std::shared_ptr<M> install(As&&... as) {
auto ptr = std::make_shared<M>(as...);
modules.push_back(std::shared_ptr<void>(ptr));
return ptr;
}
};
class Dummy {
private:
S::Bus& bus;
void start() {
bus.subscribe<Boss::Msg::Manifestation>([this](Boss::Msg::Manifestation const& _) {
return bus.raise(Boss::Msg::ManifestNotification{"forward_event"});
});
bus.subscribe<Boss::Msg::Init>([this](Boss::Msg::Init const& _) {
return Boss::concurrent(bus.raise(Boss::Msg::SolicitChannelCandidates()));
});
}
public:
explicit Dummy( S::Bus& bus_) : bus(bus_) {
start();
}
};
}
namespace Boss { namespace Mod {
std::shared_ptr<void> all( std::ostream& cout
, S::Bus& bus
, Ev::ThreadPool& threadpool
, std::function< Net::Fd( std::string const&
, std::string const&
)
> open_rpc_socket
) {
auto all = std::make_shared<All>();
/* The waiter is shared among most of the other modules. */
auto waiter = all->install<Waiter>(bus);
all->install<JsonOutputter>(cout, bus);
all->install<CommandReceiver>(bus);
all->install<Manifester>(bus);
all->install<Initiator>(bus, threadpool, std::move(open_rpc_socket));
all->install<BlockTracker>(bus);
all->install<Timers>(bus, *waiter);
all->install<InitialConnect>(bus);
all->install<Connector>(bus);
all->install<NeedsConnectSolicitor>(bus);
all->install<ConnectFinderByDns>(bus);
all->install<ConnectFinderByHardcode>(bus);
all->install<ListpeersAnnouncer>(bus);
all->install<Reconnector>(bus);
all->install<ChannelFinderByPopularity>(bus, *waiter);
all->install<OnchainFeeMonitor>(bus);
all->install<Dummy>(bus);
return all;
}
}}