Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
logic_controller.cpp
1#include "logic_controller.h"
2#include <nlohmann/json.hpp>
3#include "../cavoke.h"
4#include "../utils.h"
5
6namespace cavoke::logic_server::controllers {
7
8using json = nlohmann::json;
9
10void LogicController::validate(
11 const drogon::HttpRequestPtr &req,
12 std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
13 std::cout << "GOT REQUEST " << req->getBody() << std::endl;
14 try {
15 InitSettings settings = json::parse(req->getBody());
16 ValidationResult result;
17
18 result.success = cavoke::validate_settings(
19 settings.settings, settings.occupied_positions,
20 [&result](const std::string &message) {
21 result.message = message;
22 });
23
24 std::cout << "SENT RESPONSE " << json(result).dump() << std::endl;
25 callback(newNlohmannJsonResponse(result));
26 } catch (const json::parse_error &) {
27 return CALLBACK_STATUS_CODE(k400BadRequest);
28 } catch (const json::out_of_range &) {
29 return CALLBACK_STATUS_CODE(k400BadRequest);
30 }
31}
32
33void LogicController::init_state(
34 const drogon::HttpRequestPtr &req,
35 std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
36 std::cout << "GOT REQUEST " << req->getBody() << std::endl;
37 try {
38 InitSettings settings = json::parse(req->getBody());
39
40 GameState result =
41 cavoke::init_state(settings.settings, settings.occupied_positions);
42
43 std::cout << "SENT RESPONSE " << json(result).dump() << std::endl;
44 callback(newNlohmannJsonResponse(result));
45 } catch (const json::parse_error &) {
46 return CALLBACK_STATUS_CODE(k400BadRequest);
47 } catch (const json::out_of_range &) {
48 return CALLBACK_STATUS_CODE(k400BadRequest);
49 }
50}
51
52void LogicController::apply_move(
53 const drogon::HttpRequestPtr &req,
54 std::function<void(const drogon::HttpResponsePtr &)> &&callback) {
55 std::cout << "GOT REQUEST " << req->getBody() << std::endl;
56 try {
57 GameMove move = json::parse(req->getBody());
58
59 GameState result = cavoke::apply_move(move);
60
61 std::cout << "SENT RESPONSE " << json(result).dump() << std::endl;
62 callback(newNlohmannJsonResponse(result));
63 } catch (const json::parse_error &) {
64 return CALLBACK_STATUS_CODE(k400BadRequest);
65 } catch (const json::out_of_range &) {
66 return CALLBACK_STATUS_CODE(k400BadRequest);
67 }
68}
69
70} // namespace cavoke::logic_server::controllers