package plugin import ( "log" "sync" "github.com/gotunnel/pkg/plugin" "github.com/gotunnel/pkg/plugin/builtin" ) // Manager 客户端 plugin 管理器 type Manager struct { registry *plugin.Registry mu sync.RWMutex } // NewManager 创建客户端 plugin 管理器 func NewManager() (*Manager, error) { registry := plugin.NewRegistry() m := &Manager{ registry: registry, } // 注册内置 plugins if err := m.registerBuiltins(); err != nil { return nil, err } return m, nil } // registerBuiltins 注册内置 plugins func (m *Manager) registerBuiltins() error { // 注册服务端插件 if err := m.registry.RegisterAll(builtin.GetAll()); err != nil { return err } // 注册客户端插件 for _, h := range builtin.GetAllClientPlugins() { if err := m.registry.RegisterClientPlugin(h); err != nil { return err } } log.Printf("[Plugin] Registered %d server plugins, %d client plugins", len(builtin.GetAll()), len(builtin.GetAllClientPlugins())) return nil } // GetHandler 返回指定代理类型的 handler func (m *Manager) GetHandler(proxyType string) (plugin.ProxyHandler, error) { return m.registry.Get(proxyType) }