#include"Boss/Mod/BlockTracker.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/Timers.hpp" #include"Boss/Mod/Waiter.hpp" #include"Boss/Mod/all.hpp" #include"Boss/Msg/Manifestation.hpp" #include"Boss/Msg/ManifestNotification.hpp" #include"S/Bus.hpp" #include namespace { class All { private: std::vector> modules; public: template std::shared_ptr install(As&&... as) { auto ptr = std::make_shared(as...); modules.push_back(std::shared_ptr(ptr)); return ptr; } }; class Dummy { private: S::Bus& bus; void start() { bus.subscribe([this](Boss::Msg::Manifestation const& _) { return bus.raise(Boss::Msg::ManifestNotification{"forward_event"}); }); } public: explicit Dummy( S::Bus& bus_) : bus(bus_) { start(); } }; } namespace Boss { namespace Mod { std::shared_ptr 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(); /* The waiter is shared among most of the other modules. */ auto waiter = all->install(bus); all->install(cout, bus); all->install(bus); all->install(bus); all->install(bus, threadpool, std::move(open_rpc_socket)); all->install(bus); all->install(bus, *waiter); all->install(bus); all->install(bus); all->install(bus); all->install(bus); all->install(bus); all->install(bus); all->install(bus); return all; } }}