1#include "logic_controller.h"
2#include <nlohmann/json.hpp>
6namespace cavoke::logic_server::controllers {
8using json = nlohmann::json;
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;
15 InitSettings settings = json::parse(req->getBody());
18 result.success = cavoke::validate_settings(
19 settings.settings, settings.occupied_positions,
20 [&result](
const std::string &message) {
21 result.message = message;
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);
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;
38 InitSettings settings = json::parse(req->getBody());
41 cavoke::init_state(settings.settings, settings.occupied_positions);
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);
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;
57 GameMove move = json::parse(req->getBody());
59 GameState result = cavoke::apply_move(move);
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);