parselink-old/source/client/main.cpp

72 lines
2.5 KiB
C++

//-----------------------------------------------------------------------------
// ___ __ _ _
// / _ \__ _ _ __ ___ ___ / /(_)_ __ | | __
// / /_)/ _` | '__/ __|/ _ \/ / | | '_ \| |/ /
// / ___/ (_| | | \__ \ __/ /__| | | | | <
// \/ \__,_|_| |___/\___\____/_|_| |_|_|\_\ .
//
//-----------------------------------------------------------------------------
// Author: Kurt Sassenrath
// Module: Client
//
// Client entrypoint. Should load config.
//
// Copyright (c) 2023 Kurt Sassenrath.
//
// License TBD.
//-----------------------------------------------------------------------------
#include "client.h"
#include "parselink/logging.h"
#include "parselink/utility/argparse.h"
namespace {
parselink::logging::logger logger("main");
using level = parselink::logging::level;
int run(std::span<std::string_view> arg_list) {
argparse::command_line_parser parser({
{"server", {std::string{"localhost"}}},
{"server_port", {std::uint16_t{9001}}},
{"websocket_port", {std::uint16_t{10501}}},
{"websocket_server", {std::string{"localhost"}}},
{"verbose", {false}},
});
auto v = parser.try_parse(arg_list)
.map([](decltype(parser)::result args) {
if (args.opt<bool>("verbose")) {
logger.set_threshold(level::trace);
}
parselink::client::config cfg;
cfg.server_address = args.opt<std::string>("server");
cfg.server_port =
args.opt<std::uint16_t>("server_port");
cfg.websocket_port =
args.opt<std::uint16_t>("websocket_port");
cfg.websocket_address =
args.opt<std::string>("websocket_server");
return parselink::client::create_and_run(cfg);
})
.map([](auto err) { return err.value(); })
.map_error([](auto ec) {
return int(std::errc::invalid_argument);
});
return v ? *v : v.error();
}
} // namespace
int main(int argc, char* argv[]) {
// TODO(ksassenrath): Add configuration file to the mix.
std::vector<std::string_view> args;
for (int i = 1; i < argc; ++i) {
args.emplace_back(argv[i]);
}
return run(args);
}