Luanti 5.16.0-dev
 
Loading...
Searching...
No Matches
sscsm_environment.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 <memory>
8#include <optional>
9#include <string>
10#include <string_view>
11#include "client/client.h"
12#include "threading/thread.h"
13#include "sscsm_controller.h"
14#include "sscsm_irequest.h"
15#include "../scripting_sscsm.h"
16
26{
27 std::shared_ptr<StupidChannel> m_channel;
28 std::unique_ptr<SSCSMScripting> m_script;
29 // the virtual file system.
30 // paths look like this:
31 // *client_builtin*:subdir/foo.lua
32 // *server_builtin*:subdir/foo.lua
33 // modname:subdir/foo.lua
34 std::unique_ptr<ModVFS> m_vfs;
35
36 void *run() override;
37
39
40public:
41 SSCSMEnvironment(std::shared_ptr<StupidChannel> channel);
43
44 SSCSMScripting *getScript() { return m_script.get(); }
45
46 ModVFS *getModVFS() { return m_vfs.get(); }
47 void updateVFSFiles(std::vector<std::pair<std::string, std::string>> &&files);
48 std::optional<std::string_view> readVFSFile(const std::string &path);
49
50 void setFatalError(const std::string &reason);
51
52 template <typename RQ>
53 typename RQ::Answer doRequest(RQ &&rq)
54 {
56 exchange(serializeSSCSMRequest(std::forward<RQ>(rq)))
57 );
58 }
59};
The thread that runs SSCSM code.
Definition sscsm_environment.h:26
~SSCSMEnvironment() override
std::unique_ptr< SSCSMScripting > m_script
Definition sscsm_environment.h:28
std::unique_ptr< ModVFS > m_vfs
Definition sscsm_environment.h:34
SerializedSSCSMAnswer exchange(SerializedSSCSMRequest req)
Definition sscsm_environment.cpp:48
void updateVFSFiles(std::vector< std::pair< std::string, std::string > > &&files)
Definition sscsm_environment.cpp:53
RQ::Answer doRequest(RQ &&rq)
Definition sscsm_environment.h:53
std::shared_ptr< StupidChannel > m_channel
Definition sscsm_environment.h:27
void * run() override
Definition sscsm_environment.cpp:23
std::optional< std::string_view > readVFSFile(const std::string &path)
Definition sscsm_environment.cpp:60
SSCSMEnvironment(std::shared_ptr< StupidChannel > channel)
Definition sscsm_environment.cpp:13
void setFatalError(const std::string &reason)
Definition sscsm_environment.cpp:69
ModVFS * getModVFS()
Definition sscsm_environment.h:46
SSCSMScripting * getScript()
Definition sscsm_environment.h:44
Definition scripting_sscsm.h:15
Definition thread.h:57
T deserializeSSCSMAnswer(SerializedSSCSMAnswer answer_serialized)
Definition sscsm_irequest.h:50
std::unique_ptr< ISSCSMAnswer > SerializedSSCSMAnswer
Definition sscsm_irequest.h:25
std::unique_ptr< ISSCSMRequest > SerializedSSCSMRequest
Definition sscsm_irequest.h:37
SerializedSSCSMRequest serializeSSCSMRequest(const T &request)
Definition sscsm_irequest.h:40
Definition mod_vfs.h:11