Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
cavoke.cpp
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"
6
7namespace cavoke::logic_server {
8
9void run(const std::string &ip, uint16_t port) {
10 auto &app = drogon::app();
11
12 app.addListener(ip, port);
13
14 // print db and listeners on start
15 app.registerBeginningAdvice([]() {
16 auto listeners = drogon::app().getListeners();
17 std::string ips =
18 listeners.empty()
19 ? "<NO LISTENERS>"
20 : boost::join(
21 listeners | boost::adaptors::transformed(
22 [](const trantor::InetAddress &e) {
23 return e.toIpPort();
24 }),
25 ", ");
26 std::cout << "Listening at " << ips << "... " << std::endl;
27 });
28
29 app.registerPostHandlingAdvice([](const drogon::HttpRequestPtr &req,
30 const drogon::HttpResponsePtr &resp) {
31 // cors header for every response
32 resp->addHeader("Access-Control-Allow-Origin", "*");
33 });
34
35 auto logic_controller = std::make_shared<controllers::LogicController>();
36
37 app.registerController(logic_controller);
38
39 app.run();
40}
41
42} // namespace cavoke::logic_server
43
44namespace po = boost::program_options;
45
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");
54
55 po::variables_map vm;
56 po::store(po::parse_command_line(argc, argv, desc), vm);
57 po::notify(vm);
58
59 if (vm.count("help")) {
60 std::cout << desc << "\n";
61 return 0;
62 }
63
64 // defaults
65 std::string ip = "0.0.0.0";
66 uint16_t port = 9090;
67
68 if (vm.count("ip")) {
69 ip = vm["ip"].as<std::string>();
70 }
71
72 if (vm.count("port")) {
73 port = vm["port"].as<uint16_t>();
74 }
75
76 cavoke::logic_server::run(ip, port);
77
78 return 0;
79}