2 #include "hmbdc/app/utils/ConsoleClient.hpp" 3 #include "hmbdc/app/LoggerT.hpp" 4 #include "hmbdc/app/Client.hpp" 5 #include "hmbdc/app/Context.hpp" 6 #include "hmbdc/app/Config.hpp" 7 #include "hmbdc/os/Signals.hpp" 8 #include "hmbdc/numeric/BitMath.hpp" 10 #include <boost/program_options.hpp> 16 using namespace hmbdc;
22 namespace hmbdc {
namespace app {
namespace utils {
23 using LoggerContext = HMBDC_LOG_CONTEXT;
27 template <
typename NetContext>
28 void run(ptree
const& configIn) {
31 using namespace boost;
35 auto maxMessageSize = config.get<uint16_t>(
"maxMessageSize");
37 MyContext ctx(config.get<uint16_t>(
"inBufferSizePower2")
38 , config.get_child(
"transports").size() * 2 + 1
44 auto coreBitMask = config.getHex<uint64_t>(
"coreBitMask");
47 if (coreBitMask == 0) {
48 coreBitMask = (1ul << std::thread::hardware_concurrency()) - 1ul;
52 ctx.start(setBitsCount(coreBitMask), coreBitMask);
55 for (
auto const& t : config.get_child(
"transports")) {
56 Config tconf(config, t.second);
57 auto poolThreadAffinity = 1ul;
58 if (t.second.get(
"tx",
false)) {
59 auto sengine = NetContext::instance().createSendTransportEngine(
60 tconf, maxMessageSize);
62 ctx.addToPool(*sengine, poolThreadAffinity);
64 if (t.second.get(
"rx",
false)) {
65 auto rengine = NetContext::instance().createRecvTransportEngine(
67 ctx.addToPool(*rengine, poolThreadAffinity);
69 poolThreadAffinity <<= 1ul;
71 if (poolThreadAffinity == (1ul << setBitsCount(coreBitMask))) {
72 poolThreadAffinity = 1ul;
76 ConsoleClient<NetContext> client(ctx
80 , config.get(
"initCmd",
""));
82 ctx.addToPool(client);
88 client.waitUntilFinish();
89 sleep(config.get(
"secWaitAfterInputDone", 1));
95 template <
typename NetContext>
96 int startConsole(
char const* helpStrIn,
int argc,
char** argv) {
99 cout << helpStrIn << endl;
104 string userCfg(argv[1]);
105 std::ifstream cs(userCfg);
106 read_json(cs, config);
107 run<NetContext>(config);
class to hold an hmbdc configuration
Definition: Config.hpp:35
Definition: Client.hpp:11
Definition: LoggerT.hpp:90
Definition: TypedString.hpp:74
Definition: BitMath.hpp:6
Definition: GuardedSingleton.hpp:12
Definition: Context.hpp:384
static void onTermIntDo(function< void()> doThis)
specfy what to do when SIGTERM or SIGINT is received
Definition: Signals.hpp:29
Definition: Client.hpp:11