4 #include "dragonblockslauncher/launcher.hpp"
6 using namespace dragonblockslauncher;
8 void dragonblockslauncher::log(std::string message)
10 std::cout << "[Launcher] " << message << std::endl;
13 void dragonblockslauncher::fail(std::string error, std::string details)
16 << "Unable to launch dragonblocks: " << error << std::endl
17 << "Details: " << details << std::endl;
21 void dragonblockslauncher::launchDragonblocks(std::string gametype)
25 std::string start_function_name;
26 void (*start_function)();
28 filename = "./libdragonblocks.so";
30 log("Opening dynamic library at " + filename);
32 handle = dlmopen(LM_ID_BASE, filename.c_str(), RTLD_NOW | RTLD_GLOBAL);
35 fail("Failed to load " + filename, dlerror());
37 if (gametype != "server" && gametype != "client" && gametype != "mainmenu")
38 fail("Trying to start dragonblocks with unknown gametype", "gameype = " + gametype);
40 start_function_name = "_dragonblocks_start_" + gametype;
42 log("Obtaining start function pointer");
44 start_function = (void (*)())dlsym(handle, start_function_name.c_str());
47 fail("Failed to obtain dragonblocks start function pointer", dlerror());
49 log("Launching dragonblocks");