Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
games_controller.cpp
1#include "games_controller.h"
2#include <boost/filesystem/operations.hpp>
3#include <utility>
4
5cavoke::server::controllers::GamesController::GamesController(
6 std::shared_ptr<model::GamesStorage> games_storage)
7 : m_games_storage(std::move(games_storage)) {
8}
9
10void cavoke::server::controllers::GamesController::games_list(
11 const drogon::HttpRequestPtr &req,
12 std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
13 std::vector<model::Game> games = m_games_storage->list_games();
14 std::vector<model::GameConfig> configs;
15 std::transform(games.begin(), games.end(), std::back_inserter(configs),
16 [](const model::Game &g) { return g.config; });
17
18 auto resp = newNlohmannJsonResponse(configs);
19 callback(resp);
20}
21
22void cavoke::server::controllers::GamesController::game_config(
23 const drogon::HttpRequestPtr &req,
24 std::function<void(const drogon::HttpResponsePtr &)> &&callback,
25 const std::string &game_id) {
26 auto game = m_games_storage->get_game_by_id(game_id);
27 if (!game.has_value()) {
28 auto resp = drogon::HttpResponse::newNotFoundResponse();
29 callback(resp);
30 return;
31 }
32
33 auto resp = newNlohmannJsonResponse(game->config);
34 callback(resp);
35}
36
37void cavoke::server::controllers::GamesController::game_client_file(
38 const drogon::HttpRequestPtr &req,
39 std::function<void(const drogon::HttpResponsePtr &)> &&callback,
40 const std::string &game_id) {
41 auto game = m_games_storage->get_game_by_id(game_id);
42 if (!game.has_value()) {
43 auto resp = drogon::HttpResponse::newNotFoundResponse();
44 callback(resp);
45 return;
46 }
47
48 auto resp = drogon::HttpResponse::newFileResponse(
49 boost::filesystem::canonical(game->client_file).string(),
50 game->config.id + ".zip");
51 callback(resp);
52}