#pragma once #include "Common.h" #include "IThreaded.h" #include "TLuaFile.h" #include "TServer.h" #include #include #include #include class TLuaEngine : public IThreaded { public: explicit TLuaEngine(TServer& Server, TNetwork& Network); using TSetOfLuaFile = std::set>; void operator()() override; [[nodiscard]] const TSetOfLuaFile& LuaFiles() const { return mLuaFiles; } [[nodiscard]] TServer& Server() { return mServer; } [[nodiscard]] const TServer& Server() const { return mServer; } [[nodiscard]] TNetwork& Network() { return mNetwork; } [[nodiscard]] const TNetwork& Network() const { return mNetwork; } std::optional> GetScript(lua_State* L); private: void FolderList(const std::string& Path, bool HotSwap); void RegisterFiles(const fs::path& Path, bool HotSwap); bool IsNewFile(const std::string& Path); TNetwork& mNetwork; TServer& mServer; std::string mPath; bool mShutdown { false }; TSetOfLuaFile mLuaFiles; std::mutex mListMutex; };