add network.http_get, network.http_get_binary
This commit is contained in:
parent
186078a8d5
commit
b23318a06c
@ -30,6 +30,7 @@
|
|||||||
#include "logic/EngineController.hpp"
|
#include "logic/EngineController.hpp"
|
||||||
#include "logic/CommandsInterpreter.hpp"
|
#include "logic/CommandsInterpreter.hpp"
|
||||||
#include "logic/scripting/scripting.hpp"
|
#include "logic/scripting/scripting.hpp"
|
||||||
|
#include "network/Network.hpp"
|
||||||
#include "util/listutil.hpp"
|
#include "util/listutil.hpp"
|
||||||
#include "util/platform.hpp"
|
#include "util/platform.hpp"
|
||||||
#include "window/Camera.hpp"
|
#include "window/Camera.hpp"
|
||||||
@ -72,7 +73,8 @@ static std::unique_ptr<ImageData> load_icon(const fs::path& resdir) {
|
|||||||
|
|
||||||
Engine::Engine(EngineSettings& settings, SettingsHandler& settingsHandler, EnginePaths* paths)
|
Engine::Engine(EngineSettings& settings, SettingsHandler& settingsHandler, EnginePaths* paths)
|
||||||
: settings(settings), settingsHandler(settingsHandler), paths(paths),
|
: settings(settings), settingsHandler(settingsHandler), paths(paths),
|
||||||
interpreter(std::make_unique<cmd::CommandsInterpreter>())
|
interpreter(std::make_unique<cmd::CommandsInterpreter>()),
|
||||||
|
network(network::Network::create(settings.network))
|
||||||
{
|
{
|
||||||
paths->prepare();
|
paths->prepare();
|
||||||
loadSettings();
|
loadSettings();
|
||||||
@ -191,6 +193,7 @@ void Engine::mainloop() {
|
|||||||
: settings.display.framerate.get()
|
: settings.display.framerate.get()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
network->update();
|
||||||
processPostRunnables();
|
processPostRunnables();
|
||||||
|
|
||||||
Window::swapBuffers();
|
Window::swapBuffers();
|
||||||
@ -235,6 +238,7 @@ Engine::~Engine() {
|
|||||||
gui.reset();
|
gui.reset();
|
||||||
logger.info() << "gui finished";
|
logger.info() << "gui finished";
|
||||||
audio::close();
|
audio::close();
|
||||||
|
network.reset();
|
||||||
scripting::close();
|
scripting::close();
|
||||||
logger.info() << "scripting finished";
|
logger.info() << "scripting finished";
|
||||||
Window::terminate();
|
Window::terminate();
|
||||||
@ -482,3 +486,7 @@ void Engine::postRunnable(const runnable& callback) {
|
|||||||
SettingsHandler& Engine::getSettingsHandler() {
|
SettingsHandler& Engine::getSettingsHandler() {
|
||||||
return settingsHandler;
|
return settingsHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
network::Network& Engine::getNetwork() {
|
||||||
|
return *network;
|
||||||
|
}
|
||||||
|
|||||||
@ -37,6 +37,10 @@ namespace cmd {
|
|||||||
class CommandsInterpreter;
|
class CommandsInterpreter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace network {
|
||||||
|
class Network;
|
||||||
|
}
|
||||||
|
|
||||||
class initialize_error : public std::runtime_error {
|
class initialize_error : public std::runtime_error {
|
||||||
public:
|
public:
|
||||||
initialize_error(const std::string& message) : std::runtime_error(message) {}
|
initialize_error(const std::string& message) : std::runtime_error(message) {}
|
||||||
@ -56,6 +60,7 @@ class Engine : public util::ObjectsKeeper {
|
|||||||
std::recursive_mutex postRunnablesMutex;
|
std::recursive_mutex postRunnablesMutex;
|
||||||
std::unique_ptr<EngineController> controller;
|
std::unique_ptr<EngineController> controller;
|
||||||
std::unique_ptr<cmd::CommandsInterpreter> interpreter;
|
std::unique_ptr<cmd::CommandsInterpreter> interpreter;
|
||||||
|
std::unique_ptr<network::Network> network;
|
||||||
std::vector<std::string> basePacks;
|
std::vector<std::string> basePacks;
|
||||||
|
|
||||||
uint64_t frame = 0;
|
uint64_t frame = 0;
|
||||||
@ -148,4 +153,6 @@ public:
|
|||||||
PacksManager createPacksManager(const fs::path& worldFolder);
|
PacksManager createPacksManager(const fs::path& worldFolder);
|
||||||
|
|
||||||
SettingsHandler& getSettingsHandler();
|
SettingsHandler& getSettingsHandler();
|
||||||
|
|
||||||
|
network::Network& getNetwork();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -32,6 +32,7 @@ extern const luaL_Reg inventorylib[];
|
|||||||
extern const luaL_Reg itemlib[];
|
extern const luaL_Reg itemlib[];
|
||||||
extern const luaL_Reg jsonlib[];
|
extern const luaL_Reg jsonlib[];
|
||||||
extern const luaL_Reg mat4lib[];
|
extern const luaL_Reg mat4lib[];
|
||||||
|
extern const luaL_Reg networklib[];
|
||||||
extern const luaL_Reg packlib[];
|
extern const luaL_Reg packlib[];
|
||||||
extern const luaL_Reg particleslib[]; // gfx.particles
|
extern const luaL_Reg particleslib[]; // gfx.particles
|
||||||
extern const luaL_Reg playerlib[];
|
extern const luaL_Reg playerlib[];
|
||||||
|
|||||||
43
src/logic/scripting/lua/libs/libnetwork.cpp
Normal file
43
src/logic/scripting/lua/libs/libnetwork.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include "api_lua.hpp"
|
||||||
|
|
||||||
|
#include "engine.hpp"
|
||||||
|
#include "network/Network.hpp"
|
||||||
|
|
||||||
|
using namespace scripting;
|
||||||
|
|
||||||
|
static int l_http_get(lua::State* L) {
|
||||||
|
std::string url(lua::require_lstring(L, 1));
|
||||||
|
|
||||||
|
lua::pushvalue(L, 2);
|
||||||
|
auto onResponse = lua::create_lambda(L);
|
||||||
|
|
||||||
|
engine->getNetwork().httpGet(url, [onResponse](std::vector<char> bytes) {
|
||||||
|
engine->postRunnable([=]() {
|
||||||
|
onResponse({std::string(bytes.data(), bytes.size())});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int l_http_get_binary(lua::State* L) {
|
||||||
|
std::string url(lua::require_lstring(L, 1));
|
||||||
|
|
||||||
|
lua::pushvalue(L, 2);
|
||||||
|
auto onResponse = lua::create_lambda(L);
|
||||||
|
|
||||||
|
engine->getNetwork().httpGet(url, [onResponse](std::vector<char> bytes) {
|
||||||
|
auto buffer = std::make_shared<util::Buffer<ubyte>>(
|
||||||
|
reinterpret_cast<const ubyte*>(bytes.data()), bytes.size()
|
||||||
|
);
|
||||||
|
engine->postRunnable([=]() {
|
||||||
|
onResponse({buffer});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const luaL_Reg networklib[] = {
|
||||||
|
{"http_get", lua::wrap<l_http_get>},
|
||||||
|
{"http_get_binary", lua::wrap<l_http_get_binary>},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
@ -65,6 +65,7 @@ static void create_libs(State* L, StateType stateType) {
|
|||||||
openlib(L, "audio", audiolib);
|
openlib(L, "audio", audiolib);
|
||||||
openlib(L, "console", consolelib);
|
openlib(L, "console", consolelib);
|
||||||
openlib(L, "player", playerlib);
|
openlib(L, "player", playerlib);
|
||||||
|
openlib(L, "network", networklib);
|
||||||
|
|
||||||
openlib(L, "entities", entitylib);
|
openlib(L, "entities", entitylib);
|
||||||
openlib(L, "cameras", cameralib);
|
openlib(L, "cameras", cameralib);
|
||||||
|
|||||||
@ -16,7 +16,7 @@ TEST(curltest, curltest) {
|
|||||||
auto view = std::string_view(data.data(), data.size());
|
auto view = std::string_view(data.data(), data.size());
|
||||||
auto value = json::parse(view);
|
auto value = json::parse(view);
|
||||||
std::cout << value << std::endl;
|
std::cout << value << std::endl;
|
||||||
}
|
}, [](auto){}
|
||||||
);
|
);
|
||||||
if (false) {
|
if (false) {
|
||||||
auto socket = network->connect("localhost", 8000);
|
auto socket = network->connect("localhost", 8000);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user