1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-09-30 19:22:14 +00:00
luanti/src/script/sscsm/sscsm_environment.cpp

49 lines
1.1 KiB
C++
Raw Normal View History

// SPDX-FileCopyrightText: 2024 Luanti authors
//
// SPDX-License-Identifier: LGPL-2.1-or-later
#include "sscsm_environment.h"
#include "sscsm_requests.h"
#include "sscsm_events.h"
#include "sscsm_stupid_channel.h"
void *SSCSMEnvironment::run()
{
while (true) {
auto next_event = requestPollNextEvent();
if (dynamic_cast<SSCSMEventTearDown *>(next_event.get())) {
break;
}
next_event->exec(this);
}
return nullptr;
}
SerializedSSCSMAnswer SSCSMEnvironment::exchange(SerializedSSCSMRequest req)
{
return m_channel->exchangeA(std::move(req));
}
std::unique_ptr<ISSCSMEvent> SSCSMEnvironment::requestPollNextEvent()
{
auto request = SSCSMRequestPollNextEvent{};
auto answer = deserializeSSCSMAnswer<SSCSMRequestPollNextEvent::Answer>(
exchange(serializeSSCSMRequest(request))
);
return std::move(answer.next_event);
}
MapNode SSCSMEnvironment::requestGetNode(v3s16 pos)
{
auto request = SSCSMRequestGetNode{};
request.pos = pos;
auto answer = deserializeSSCSMAnswer<SSCSMRequestGetNode::Answer>(
exchange(serializeSSCSMRequest(request))
);
return answer.node;
}