All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 29s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 49s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 34s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 59s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 34s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 55s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 37s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 1m7s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 50s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 33s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 59s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 52s
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
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)
|
|
}
|
|
|
|
// ListPlugins 返回所有可用的 plugins
|
|
func (m *Manager) ListPlugins() []plugin.PluginInfo {
|
|
return m.registry.List()
|
|
}
|
|
|
|
// GetRegistry 返回插件注册表
|
|
func (m *Manager) GetRegistry() *plugin.Registry {
|
|
return m.registry
|
|
}
|