Compare commits

..

6 Commits

Author SHA1 Message Date
Simon 058247ff13 Apply suggestions from code review
Co-authored-by: Lion <development@kortlepel.com>
2023-01-15 17:11:43 +00:00
Anonymous275 5ea4bde5e2 fix linux build 2022-12-29 17:20:34 +00:00
Anonymous275 99e249ab2a rename Hash function to HashPassword
move HashPassword to cpp only
move check to line 285
2022-12-29 17:06:06 +00:00
Anonymous275 2ab4ebc264 - add 120 seconds timeout 2022-12-23 16:24:24 +00:00
Anonymous275 16bcabbc97 - fix linux build 2022-12-21 22:34:21 +00:00
Anonymous275 bcf6b4624a - add hash function
- add password config
- add debug messages for password stages
- add pass boolean for heartbeat
- adjust network codes
2022-12-21 22:26:45 +00:00
3 changed files with 14 additions and 29 deletions
+3 -10
View File
@@ -41,14 +41,7 @@ struct TLuaResult {
sol::object Result { sol::lua_nil };
TLuaStateId StateId;
std::string Function;
std::shared_ptr<std::mutex> ReadyMutex {
std::make_shared<std::mutex>()
};
std::shared_ptr<std::condition_variable> ReadyCondition {
std::make_shared<std::condition_variable>()
};
void MarkAsReady();
// TODO: Add condition_variable
void WaitUntilReady();
};
@@ -105,8 +98,8 @@ public:
return mLuaStates.size();
}
std::vector<std::string> GetLuaStateNames() {
std::vector<std::string> names {};
for (auto const& [stateId, _] : mLuaStates) {
std::vector<std::string> names{};
for(auto const& [stateId, _ ] : mLuaStates) {
names.push_back(stateId);
}
return names;
+3 -1
View File
@@ -606,7 +606,9 @@ TConsole::TConsole() {
HandleLuaInternalCommand(cmd.substr(1));
} else {
auto Future = mLuaEngine->EnqueueScript(mStateId, { std::make_shared<std::string>(TrimmedCmd), "", "" });
Future->WaitUntilReady();
while (!Future->Ready) {
std::this_thread::yield(); // TODO: Add a timeout
}
if (Future->Error) {
beammp_lua_error("error in " + mStateId + ": " + Future->ErrorMessage);
}
+8 -18
View File
@@ -286,7 +286,6 @@ void TLuaEngine::WaitForAll(std::vector<std::shared_ptr<TLuaResult>>& Results, c
bool Cancelled = false;
size_t ms = 0;
std::set<std::string> WarnedResults;
while (!Result->Ready && !Cancelled) {
std::this_thread::sleep_for(std::chrono::milliseconds(10));
ms += 10;
@@ -301,7 +300,6 @@ void TLuaEngine::WaitForAll(std::vector<std::shared_ptr<TLuaResult>>& Results, c
}
}
}
if (Cancelled) {
beammp_lua_warn("'" + Result->Function + "' in '" + Result->StateId + "' failed to execute in time and was not waited for. It may still finish executing at a later time.");
LuaAPI::MP::Engine->ReportErrors({ Result });
@@ -427,7 +425,7 @@ sol::table TLuaEngine::StateThreadData::Lua_TriggerGlobalEvent(const std::string
Result->Error = true;
Result->ErrorMessage = "Function result in TriggerGlobalEvent was invalid";
}
Result->MarkAsReady();
Result->Ready = true;
Return.push_back(Result);
}
}
@@ -957,7 +955,7 @@ void TLuaEngine::StateThreadData::operator()() {
sol::error Err = Res;
S.second->ErrorMessage = Err.what();
}
S.second->MarkAsReady();
S.second->Ready = true;
}
}
{ // StateFunctionQueue Scope
@@ -1018,11 +1016,11 @@ void TLuaEngine::StateThreadData::operator()() {
sol::error Err = Res;
Result->ErrorMessage = Err.what();
}
Result->MarkAsReady();
Result->Ready = true;
} else {
Result->Error = true;
Result->ErrorMessage = BeamMPFnNotFoundError; // special error kind that we can ignore later
Result->MarkAsReady();
Result->Ready = true;
}
}
}
@@ -1072,19 +1070,11 @@ void TLuaEngine::StateThreadData::AddPath(const fs::path& Path) {
mPaths.push(Path);
}
void TLuaResult::MarkAsReady() {
{
std::lock_guard<std::mutex> readyLock(*this->ReadyMutex);
this->Ready = true;
}
this->ReadyCondition->notify_all();
}
void TLuaResult::WaitUntilReady() {
std::unique_lock readyLock(*this->ReadyMutex);
// wait if not ready yet
if(!this->Ready)
this->ReadyCondition->wait(readyLock);
while (!Ready) {
std::this_thread::yield();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
TLuaChunk::TLuaChunk(std::shared_ptr<std::string> Content, std::string FileName, std::string PluginPath)