Luanti 5.17.0-dev
Loading...
Searching...
No Matches
sscsm_requests.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Luanti authors
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
5#pragma once
6
7#include "sscsm_irequest.h"
8#include "sscsm_ievent.h"
9#include "mapnode.h"
10#include "map.h"
11#include "client/client.h"
12#include "log_internal.h"
13#include "itemdef.h"
14#include "nodedef.h"
15
16// Poll the next event (e.g. on_globalstep)
18{
19 struct Answer final : public ISSCSMAnswer
20 {
21 std::unique_ptr<ISSCSMEvent> next_event;
22 };
23
25 {
26 FATAL_ERROR("SSCSMRequestPollNextEvent needs to be handled by SSCSMControler::runEvent()");
27 }
28};
29
30// Some error occurred in the SSCSM env
32{
33 struct Answer final : public ISSCSMAnswer
34 {
35 };
36
37 std::string reason;
38
40 {
41 client->setFatalError("[SSCSM] " + reason);
42
44 }
45};
46
47// print(text)
48// FIXME: override global loggers to use this in sscsm process
49struct SSCSMRequestPrint final : public ISSCSMRequest
50{
51 struct Answer final : public ISSCSMAnswer
52 {
53 };
54
55 std::string text;
56
58 {
59 rawstream << text << std::endl;
60
62 }
63};
64
65// core.log(level, text)
66// FIXME: override global loggers to use this in sscsm process
67struct SSCSMRequestLog final : public ISSCSMRequest
68{
69 struct Answer final : public ISSCSMAnswer
70 {
71 };
72
73 std::string text;
75
77 {
78 if (level >= LL_MAX) {
79 throw MisbehavedSSCSMException("Tried to log at non-existent level.");
80 } else {
81 g_logger.log(level, text);
82 }
83
85 }
86};
87
88// core.get_node(pos)
90{
91 struct Answer final : public ISSCSMAnswer
92 {
95 };
96
98
100 {
101 bool is_pos_ok = false;
102 MapNode node = client->getEnv().getMap().getNode(pos, &is_pos_ok);
103
104 Answer answer{};
105 answer.node = node;
106 answer.is_pos_ok = is_pos_ok;
107 return serializeSSCSMAnswer(std::move(answer));
108 }
109};
110
111// Fetch all currently known item and node definitions, to populate
112// core.registered_items/_nodes/_tools/_craftitems on the SSCSM side.
113// TODO: aliases and the content-id name mapping are not sent yet.
115{
116 struct Answer final : public ISSCSMAnswer
117 {
118 std::vector<ItemDefinition> items;
119 // TODO: ContentFeatures may need to be copied,
120 // or direct store a serialized version
121 std::vector<const ContentFeatures*> nodes;
122 };
123
125 {
126 Answer answer{};
127
128 client->idef()->getDefinitions(answer.items);
129 const NodeDefManager *ndef = client->ndef();
130 answer.nodes.reserve(ndef->size());
131 for (u32 c = 0; c < ndef->size(); c++) {
132 answer.nodes.push_back(&ndef->get(c));
133 }
134
135 return serializeSSCSMAnswer(std::move(answer));
136 }
137};
Definition client.h:107
Definition exceptions.h:96
This class is for getting the actual properties of nodes from their content ID.
Definition nodedef.h:514
const ContentFeatures & get(content_t c) const
Definition nodedef.h:528
u32 size() const
Definition nodedef.h:672
#define FATAL_ERROR(msg)
Definition debug.h:32
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
Logger g_logger
Definition log.cpp:56
LogStream rawstream(none_target_raw)
LogLevel
Definition log_internal.h:18
@ LL_MAX
Definition log_internal.h:26
Definition activeobjectmgr.cpp:11
SerializedSSCSMAnswer serializeSSCSMAnswer(T &&answer)
Definition sscsm_irequest.h:67
std::unique_ptr< ISSCSMAnswer > SerializedSSCSMAnswer
Definition sscsm_irequest.h:25
Definition sscsm_irequest.h:17
Definition sscsm_irequest.h:29
Definition mapnode.h:115
Definition sscsm_requests.h:117
std::vector< const ContentFeatures * > nodes
Definition sscsm_requests.h:121
std::vector< ItemDefinition > items
Definition sscsm_requests.h:118
Definition sscsm_requests.h:115
SerializedSSCSMAnswer exec(Client *client) override
Definition sscsm_requests.h:124
Definition sscsm_requests.h:92
MapNode node
Definition sscsm_requests.h:93
bool is_pos_ok
Definition sscsm_requests.h:94
Definition sscsm_requests.h:90
SerializedSSCSMAnswer exec(Client *client) override
Definition sscsm_requests.h:99
v3s16 pos
Definition sscsm_requests.h:97
Definition sscsm_requests.h:70
Definition sscsm_requests.h:68
std::string text
Definition sscsm_requests.h:73
LogLevel level
Definition sscsm_requests.h:74
SerializedSSCSMAnswer exec(Client *client) override
Definition sscsm_requests.h:76
Definition sscsm_requests.h:20
std::unique_ptr< ISSCSMEvent > next_event
Definition sscsm_requests.h:21
Definition sscsm_requests.h:18
SerializedSSCSMAnswer exec(Client *client) override
Definition sscsm_requests.h:24
Definition sscsm_requests.h:52
Definition sscsm_requests.h:50
std::string text
Definition sscsm_requests.h:55
SerializedSSCSMAnswer exec(Client *client) override
Definition sscsm_requests.h:57
Definition sscsm_requests.h:34
Definition sscsm_requests.h:32
SerializedSSCSMAnswer exec(Client *client) override
Definition sscsm_requests.h:39
std::string reason
Definition sscsm_requests.h:37