mirror of
https://github.com/SantaSpeen/BeamMP-Server.git
synced 2026-06-17 21:00:53 +00:00
lua unique_ptr to shared_ptr
This commit is contained in:
@@ -72,6 +72,6 @@ public:
|
|||||||
void SetStopThread(bool StopThread) { _StopThread = StopThread; }
|
void SetStopThread(bool StopThread) { _StopThread = StopThread; }
|
||||||
bool GetStopThread() const { return _StopThread; }
|
bool GetStopThread() const { return _StopThread; }
|
||||||
};
|
};
|
||||||
int CallFunction(Lua* lua, const std::string& FuncName, std::unique_ptr<LuaArg> args);
|
int CallFunction(Lua* lua, const std::string& FuncName, std::shared_ptr<LuaArg> args);
|
||||||
int TriggerLuaEvent(const std::string& Event, bool local, Lua* Caller, std::unique_ptr<LuaArg> arg, bool Wait);
|
int TriggerLuaEvent(const std::string& Event, bool local, Lua* Caller, std::shared_ptr<LuaArg> arg, bool Wait);
|
||||||
extern std::set<std::unique_ptr<Lua>> PluginEngine;
|
extern std::set<std::unique_ptr<Lua>> PluginEngine;
|
||||||
|
|||||||
+12
-12
@@ -14,10 +14,10 @@
|
|||||||
#include <optional>
|
#include <optional>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
std::unique_ptr<LuaArg> CreateArg(lua_State* L, int T, int S) {
|
std::shared_ptr<LuaArg> CreateArg(lua_State* L, int T, int S) {
|
||||||
if (S > T)
|
if (S > T)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
std::unique_ptr<LuaArg> temp(new LuaArg);
|
std::shared_ptr<LuaArg> temp(new LuaArg);
|
||||||
for (int C = S; C <= T; C++) {
|
for (int C = S; C <= T; C++) {
|
||||||
if (lua_isstring(L, C)) {
|
if (lua_isstring(L, C)) {
|
||||||
temp->args.emplace_back(std::string(lua_tostring(L, C)));
|
temp->args.emplace_back(std::string(lua_tostring(L, C)));
|
||||||
@@ -53,11 +53,11 @@ void SendError(lua_State* L, const std::string& msg) {
|
|||||||
}
|
}
|
||||||
warn(a + Sec(" | Incorrect Call of ") + msg);
|
warn(a + Sec(" | Incorrect Call of ") + msg);
|
||||||
}
|
}
|
||||||
int Trigger(Lua* lua, const std::string& R, std::unique_ptr<LuaArg> arg) {
|
int Trigger(Lua* lua, const std::string& R, std::shared_ptr<LuaArg> arg) {
|
||||||
std::lock_guard<std::mutex> lockGuard(lua->Lock);
|
std::lock_guard<std::mutex> lockGuard(lua->Lock);
|
||||||
std::packaged_task<int(std::unique_ptr<LuaArg>)> task([lua, R](std::unique_ptr<LuaArg> arg) { return CallFunction(lua, R, std::move(arg)); });
|
std::packaged_task<int(std::shared_ptr<LuaArg>)> task([lua, R](std::shared_ptr<LuaArg> arg) { return CallFunction(lua, R, arg); });
|
||||||
std::future<int> f1 = task.get_future();
|
std::future<int> f1 = task.get_future();
|
||||||
std::thread t(std::move(task), std::move(arg));
|
std::thread t(std::move(task), arg);
|
||||||
t.detach();
|
t.detach();
|
||||||
auto status = f1.wait_for(std::chrono::seconds(5));
|
auto status = f1.wait_for(std::chrono::seconds(5));
|
||||||
if (status != std::future_status::timeout)
|
if (status != std::future_status::timeout)
|
||||||
@@ -65,11 +65,11 @@ int Trigger(Lua* lua, const std::string& R, std::unique_ptr<LuaArg> arg) {
|
|||||||
SendError(lua->GetState(), R + " took too long to respond");
|
SendError(lua->GetState(), R + " took too long to respond");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int FutureWait(Lua* lua, const std::string& R, std::unique_ptr<LuaArg> arg, bool Wait) {
|
int FutureWait(Lua* lua, const std::string& R, std::shared_ptr<LuaArg> arg, bool Wait) {
|
||||||
Assert(lua);
|
Assert(lua);
|
||||||
std::packaged_task<int(std::unique_ptr<LuaArg>)> task([lua, R](std::unique_ptr<LuaArg> arg) { return Trigger(lua, R, std::move(arg)); });
|
std::packaged_task<int(std::shared_ptr<LuaArg>)> task([lua, R](std::shared_ptr<LuaArg> arg) { return Trigger(lua, R, arg); });
|
||||||
std::future<int> f1 = task.get_future();
|
std::future<int> f1 = task.get_future();
|
||||||
std::thread t(std::move(task), std::move(arg));
|
std::thread t(std::move(task), arg);
|
||||||
t.detach();
|
t.detach();
|
||||||
int T = 0;
|
int T = 0;
|
||||||
if (Wait)
|
if (Wait)
|
||||||
@@ -79,16 +79,16 @@ int FutureWait(Lua* lua, const std::string& R, std::unique_ptr<LuaArg> arg, bool
|
|||||||
return f1.get();
|
return f1.get();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int TriggerLuaEvent(const std::string& Event, bool local, Lua* Caller, std::unique_ptr<LuaArg> arg, bool Wait) {
|
int TriggerLuaEvent(const std::string& Event, bool local, Lua* Caller, std::shared_ptr<LuaArg> arg, bool Wait) {
|
||||||
int R = 0;
|
int R = 0;
|
||||||
for (auto& Script : PluginEngine) {
|
for (auto& Script : PluginEngine) {
|
||||||
if (Script->IsRegistered(Event)) {
|
if (Script->IsRegistered(Event)) {
|
||||||
if (local) {
|
if (local) {
|
||||||
if (Script->GetPluginName() == Caller->GetPluginName()) {
|
if (Script->GetPluginName() == Caller->GetPluginName()) {
|
||||||
R += FutureWait(Script.get(), Script->GetRegistered(Event), std::move(arg), Wait);
|
R += FutureWait(Script.get(), Script->GetRegistered(Event), arg, Wait);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
R += FutureWait(Script.get(), Script->GetRegistered(Event), std::move(arg), Wait);
|
R += FutureWait(Script.get(), Script->GetRegistered(Event), arg, Wait);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return R;
|
return R;
|
||||||
@@ -563,7 +563,7 @@ std::string Lua::GetOrigin() {
|
|||||||
return fs::path(GetFileName()).filename().string();
|
return fs::path(GetFileName()).filename().string();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CallFunction(Lua* lua, const std::string& FuncName, std::unique_ptr<LuaArg> Arg) {
|
int CallFunction(Lua* lua, const std::string& FuncName, std::shared_ptr<LuaArg> Arg) {
|
||||||
lua_State* luaState = lua->GetState();
|
lua_State* luaState = lua->GetState();
|
||||||
lua_getglobal(luaState, FuncName.c_str());
|
lua_getglobal(luaState, FuncName.c_str());
|
||||||
if (lua_isfunction(luaState, -1)) {
|
if (lua_isfunction(luaState, -1)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user