1#include <drogon/drogon.h>
2#include <boost/algorithm/string/join.hpp>
3#include <boost/program_options.hpp>
4#include <boost/range/adaptor/transformed.hpp>
5#include "controllers/logic_controller.h"
7namespace cavoke::logic_server {
9void run(
const std::string &ip, uint16_t port) {
10 auto &app = drogon::app();
12 app.addListener(ip, port);
15 app.registerBeginningAdvice([]() {
16 auto listeners = drogon::app().getListeners();
21 listeners | boost::adaptors::transformed(
22 [](
const trantor::InetAddress &e) {
26 std::cout <<
"Listening at " << ips <<
"... " << std::endl;
29 app.registerPostHandlingAdvice([](
const drogon::HttpRequestPtr &req,
30 const drogon::HttpResponsePtr &resp) {
32 resp->addHeader(
"Access-Control-Allow-Origin",
"*");
35 auto logic_controller = std::make_shared<controllers::LogicController>();
37 app.registerController(logic_controller);
44namespace po = boost::program_options;
46int main(
int argc,
char *argv[]) {
47 po::options_description desc(
"Allowed options");
48 auto add_desc_options = desc.add_options();
49 add_desc_options(
"help,h",
"Print help");
50 add_desc_options(
"ip,i", po::value<std::string>()->default_value(
"0.0.0.0"),
51 "IP address for connection");
52 add_desc_options(
"port,p", po::value<uint16_t>()->default_value(9090),
53 "TCP/IP port number for connection");
56 po::store(po::parse_command_line(argc, argv, desc), vm);
59 if (vm.count(
"help")) {
60 std::cout << desc <<
"\n";
65 std::string ip =
"0.0.0.0";
69 ip = vm[
"ip"].as<std::string>();
72 if (vm.count(
"port")) {
73 port = vm[
"port"].as<uint16_t>();
76 cavoke::logic_server::run(ip, port);