Files
zkcoi 7cbe063ac1 fix: update core dependency path to git.zkcoi.com/zkcoi/meshray (drop /core)
- go.mod require/replace git.zkcoi.com/zkcoi/meshray/core -> git.zkcoi.com/zkcoi/meshray
- .go imports meshray/core/{engine,connect} -> meshray/{engine,connect} (5 files)
- sync CHANGELOG + adapter.go comments
2026-07-15 16:37:03 +08:00

81 lines
2.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package corebind 的契约注册:向开源契约(meshray-contract)注册增强 Bind 工厂与引擎提供方。
package corebind
import (
"sync"
"git.zkcoi.com/zkcoi/meshray-contract"
"git.zkcoi.com/zkcoi/meshray/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
})
}