From 23df01872ae13342e8ed171e548f7cbdcda1ce60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sun, 1 Mar 2026 19:55:45 +0000 Subject: [PATCH] Delete internal/lua/22222plugin.go --- internal/lua/22222plugin.go | 154 ------------------------------------ 1 file changed, 154 deletions(-) delete mode 100644 internal/lua/22222plugin.go diff --git a/internal/lua/22222plugin.go b/internal/lua/22222plugin.go deleted file mode 100644 index e6ac9a2..0000000 --- a/internal/lua/22222plugin.go +++ /dev/null @@ -1,154 +0,0 @@ -// /futriis/internal/lua/plugin.go -// Пакет lua реализует систему плагинов на языке Lua для расширения функциональности СУБД. -// PluginManager управляет загрузкой, хранением и выполнением Lua-скриптов из указанной директории. -// Предоставляет мост между Go и Lua через регистрацию функций, доступных из скриптов. -// Позволяет динамически расширять возможности базы данных без перекомпиляции основного кода. -// Поддерживает возможность отключения через конфигурацию для минимизации ресурсов. - -package lua - -import ( - "fmt" - "io/ioutil" - "path/filepath" - "sync" - - "futriis/pkg/config" - "futriis/pkg/utils" - "github.com/yuin/gopher-lua" -) - -// PluginManager управляет Lua плагинами -type PluginManager struct { - state *lua.LState - plugins map[string]*lua.LFunction - mu sync.RWMutex - enabled bool -} - -// NewPluginManager создаёт новый менеджер плагинов -func NewPluginManager(cfg *config.LuaConfig) *PluginManager { - pm := &PluginManager{ - plugins: make(map[string]*lua.LFunction), - enabled: cfg.Enabled, - } - - if cfg.Enabled { - pm.state = lua.NewState() - pm.registerFunctions() - } - - return pm -} - -// registerFunctions регистрирует функции Go, доступные из Lua -func (pm *PluginManager) registerFunctions() { - if !pm.enabled || pm.state == nil { - return - } - - // Регистрируем функции для работы с данными - pm.state.SetGlobal("print", pm.state.NewFunction(func(L *lua.LState) int { - top := L.GetTop() - args := make([]interface{}, top) - for i := 1; i <= top; i++ { - args[i-1] = L.Get(i).String() - } - utils.PrintInfo(fmt.Sprint(args...)) - return 0 - })) - - pm.state.SetGlobal("get", pm.state.NewFunction(func(L *lua.LState) int { - key := L.ToString(1) - // TODO: получить значение из хранилища - L.Push(lua.LString(key)) - return 1 - })) - - pm.state.SetGlobal("set", pm.state.NewFunction(func(L *lua.LState) int { - key := L.ToString(1) - value := L.ToString(2) - // TODO: установить значение в хранилище - utils.PrintInfo("Lua set: %s = %s", key, value) - return 0 - })) -} - -// LoadPlugins загружает все Lua плагины из директории -func (pm *PluginManager) LoadPlugins(pluginsDir string) error { - if !pm.enabled || pm.state == nil { - return nil - } - - files, err := ioutil.ReadDir(pluginsDir) - if err != nil { - return err - } - - for _, file := range files { - if filepath.Ext(file.Name()) == ".lua" { - if err := pm.LoadPlugin(filepath.Join(pluginsDir, file.Name())); err != nil { - utils.PrintError("Ошибка загрузки плагина %s: %v", file.Name(), err) - } - } - } - - return nil -} - -// LoadPlugin загружает один Lua плагин -func (pm *PluginManager) LoadPlugin(path string) error { - if !pm.enabled || pm.state == nil { - return nil - } - - data, err := ioutil.ReadFile(path) - if err != nil { - return err - } - - fn, err := pm.state.LoadString(string(data)) - if err != nil { - return err - } - - pm.mu.Lock() - pm.plugins[filepath.Base(path)] = fn - pm.mu.Unlock() - - utils.PrintSuccess("Загружен плагин: %s", filepath.Base(path)) - return nil -} - -// ExecutePlugin выполняет функцию плагина -func (pm *PluginManager) ExecutePlugin(name string, args ...lua.LValue) error { - if !pm.enabled || pm.state == nil { - return nil - } - - pm.mu.RLock() - fn, exists := pm.plugins[name] - pm.mu.RUnlock() - - if !exists { - return fmt.Errorf("плагин %s не найден", name) - } - - pm.state.Push(fn) - for _, arg := range args { - pm.state.Push(arg) - } - - if err := pm.state.PCall(len(args), lua.MultRet, nil); err != nil { - return err - } - - return nil -} - -// Close закрывает Lua состояние -func (pm *PluginManager) Close() { - if pm.state != nil { - pm.state.Close() - } -}