#ifndef TLUAFILE_H #define TLUAFILE_H #include #include #include #include #include #include #include namespace fs = std::filesystem; class TLuaEngine; class TLuaArgs; class TLuaFile { public: explicit TLuaFile(TLuaEngine& Engine, bool Console = false); ~TLuaFile(); void RegisterEvent(const std::string& Event, const std::string& FunctionName); void UnRegisterEvent(const std::string& Event); void SetLastWrite(fs::file_time_type time); bool IsRegistered(const std::string& Event); void SetPluginName(const std::string& Name); void Execute(const std::string& Command); void SetFileName(const std::string& Name); fs::file_time_type GetLastWrite(); lua_State* GetState(); std::string GetOrigin(); void Reload(); void Init(const std::string& PluginName, const std::string& FileName, fs::file_time_type LastWrote); void SetStopThread(bool StopThread) { mStopThread = StopThread; } TLuaEngine& Engine() { return mEngine; } [[nodiscard]] std::string GetPluginName() const; [[nodiscard]] std::string GetFileName() const; [[nodiscard]] const lua_State* GetState() const; [[nodiscard]] bool GetStopThread() const { return mStopThread; } [[nodiscard]] const TLuaEngine& Engine() const { return mEngine; } [[nodiscard]] std::string GetRegistered(const std::string& Event) const; void PushArgs(const TLuaArgs& args); bool operator==(const TLuaFile& Other) const; void Load(); private: std::mutex Lock; TLuaEngine& mEngine; std::set> mRegisteredEvents; lua_State* mLuaState { nullptr }; fs::file_time_type mLastWrote; std::string mPluginName {}; std::string mFileName {}; bool mStopThread = false; bool mConsole = false; }; #endif // TLUAFILE_H