rebuild: split core into separate repo; move wg-go integration to internal/ctr/corebind
- go.mod: require git.zkcoi.com/zkcoi/meshray/core, replace => ../Meshray - internal/ctr/corebind: EnhancedBind + registry + adapter (wg-go integration isolated) - cmd/mr-wg migrated from old core/cmd/meshray-core - core/ removed; CHANGELOG updated; fix checkdb vet warning
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
// Package corebind 的契约注册:向开源契约(meshray-contract)注册增强 Bind 工厂与引擎提供方。
|
||||
package corebind
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"git.zkcoi.com/zkcoi/meshray-contract"
|
||||
"git.zkcoi.com/zkcoi/meshray/core/engine"
|
||||
"go.uber.org/zap"
|
||||
"golang.zx2c4.com/wireguard/conn"
|
||||
)
|
||||
|
||||
// engines 维护 networkID -> Engine 单例映射。
|
||||
// EnhancedBind(收发接管)与 engineController(控制面)均通过 networkID 关联同一个 Engine,
|
||||
// 使信令下发的候选地址、ICE 配置、层顺序都能落到接管该组网收发的 Engine 上。
|
||||
var (
|
||||
enginesMu sync.Mutex
|
||||
engines = make(map[string]*core.Engine)
|
||||
)
|
||||
|
||||
// getOrCreateEngine 获取或创建指定组网的 Engine 单例(线程安全)
|
||||
func getOrCreateEngine(networkID string, logger *zap.Logger) *core.Engine {
|
||||
enginesMu.Lock()
|
||||
defer enginesMu.Unlock()
|
||||
if e, ok := engines[networkID]; ok {
|
||||
return e
|
||||
}
|
||||
e := core.NewEngine(logger, core.NewMetrics())
|
||||
engines[networkID] = e
|
||||
return e
|
||||
}
|
||||
|
||||
// engineController 适配 contract.EngineController,以 networkID 关联 Engine 单例,
|
||||
// 供管理器在 enhanced 模式调用,无需直接依赖本包具体类型。
|
||||
type engineController struct {
|
||||
networkID string
|
||||
engine *core.Engine
|
||||
}
|
||||
|
||||
func (c *engineController) Start() error { return c.engine.Start() }
|
||||
|
||||
func (c *engineController) Stop() error { return c.engine.Stop() }
|
||||
|
||||
// NotifyPeerCandidates 由信令层调用:注入对端候选地址并触发 P2P 建连
|
||||
func (c *engineController) NotifyPeerCandidates(peerKey string, candidates []contract.Candidate) error {
|
||||
return c.engine.NotifyPeerInfo(peerKey, toCoreCandidates(candidates))
|
||||
}
|
||||
|
||||
// SetICEConfig 更新 ICE/STUN/TURN 配置
|
||||
func (c *engineController) SetICEConfig(cfg contract.ICEConfig) error {
|
||||
return c.engine.SetICEConfig(toCoreICEConfig(cfg))
|
||||
}
|
||||
|
||||
// SetLayerOrder 设置传输层优先级顺序(策略核心配置)
|
||||
func (c *engineController) SetLayerOrder(order []contract.Layer) error {
|
||||
c.engine.SetLayerOrder(toCoreLayerOrder(order))
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetStatus 查询引擎状态
|
||||
func (c *engineController) GetStatus() (*contract.EngineStatus, error) {
|
||||
st, err := c.engine.GetStatus()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return toContractStatus(st), nil
|
||||
}
|
||||
|
||||
// init 向开源契约注册表注册增强 Bind 工厂与引擎提供方。
|
||||
// 由管理器侧 core_enable.go 在 -tags meshray_core 构建下空白导入本包触发,
|
||||
// 此时管理器侧 contract.GetBindFactory(true) / NewEngineController 才能取到实现;
|
||||
// 默认构建不引入本包,原生直连(默认 Bind)始终可用。
|
||||
func init() {
|
||||
contract.RegisterEnhancedBindFactory(func(listenPort int, networkID string, logger *zap.Logger) (conn.Bind, error) {
|
||||
return NewEnhancedBind(listenPort, networkID, logger)
|
||||
})
|
||||
contract.RegisterEngineProvider(func(networkID string, logger *zap.Logger) (contract.EngineController, error) {
|
||||
return &engineController{networkID: networkID, engine: getOrCreateEngine(networkID, logger)}, nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user