-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMain.cc
49 lines (40 loc) · 1.44 KB
/
Main.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <grpcpp/create_channel.h>
#include <iostream>
#include "absl/log/initialize.h"
#include "cpp/cards/golf/doc_db_game_store.h"
#include "cpp/doc_db_client/doc_db_client.h"
#include "cpp/golf_service/router.h"
#include "mongoose.h"
namespace {
struct RouterHolder {
std::optional<golf_service::Router> router_;
};
RouterHolder rh;
void do_route(struct ::mg_connection *c, int ev, void *ev_data) {
rh.router_.value().route(c, ev, ev_data);
}
} // namespace
int main() {
struct mg_mgr mgr{};
mg_mgr_init(&mgr);
// init stuff here
absl::InitializeLog();
auto channel = grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials());
auto stub = std::make_shared<doc_db::DocDb::Stub>(doc_db::DocDb::Stub(channel));
auto client = std::make_shared<doc_db::DocDbClient>(doc_db::DocDbClient{stub, "golf"});
auto game_store = std::make_shared<golf::DocDbGameStore>(golf::DocDbGameStore{client});
auto game_manager = std::make_shared<golf::GameManager>(game_store);
auto handler = std::make_shared<golf_service::Handler>(golf_service::Handler{game_manager});
rh.router_ = golf_service::Router{handler};
auto socket = mg_http_listen(&mgr, "http://0.0.0.0:8000", do_route, nullptr);
if (socket == nullptr || !socket->is_listening) {
std::cout << "failed to bind port to 8000\n";
return 1;
}
std::cout << "listening on port 8000\n";
for (;;) {
mg_mgr_poll(&mgr, 500);
}
mg_mgr_free(&mgr);
return 0;
}