72 lines
2.5 KiB
C++
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);
|
|
}
|