Files
Meshray-Manager/docs/core 重构进度_v2.2.md
T
2026-06-30 15:14:37 +08:00

4.4 KiB
Raw Blame History

Core 模块代码重构进度报告 - v2.2.0

已完成的文件创建/重构(2026-03-24

Phase 1: connect/stun.go

职责STUN 协议实现,被多处调用

创建的文件

  • connect/stun.go (120 行)

提供的 API

type STUNClient struct { ... }

func NewSTUNClient(servers []string, logger *zap.Logger) *STUNClient
func (c *STUNClient) DiscoverAddress(server string) (*net.UDPAddr, error)
func (c *STUNClient) CollectCandidates() []string
func (c *STUNClient) GetExternalIP() (string, error)

调用关系

  • direct.go 调用 → 收集候选地址用于 UDP 直连
  • ice.go 将调用 → 收集 ICE 候选(待更新)

Phase 2: connect/direct.go

职责Layer 1 - Direct-UDP 建连工厂

创建的文件

  • connect/direct.go (86 行)

提供的 API

type DirectFactory struct { ... }

func NewDirectFactory(stunServers []string, logger *zap.Logger) *DirectFactory
func (f *DirectFactory) Layer() Layer
func (f *DirectFactory) Name() string
func (f *DirectFactory) Dial(ctx context.Context, config *DialConfig) (net.Conn, error)

调用关系

  • 调用 stun.go → 收集 STUN 候选地址
  • strategy.go 调用 → Layer 1 优先尝试直连

实现细节

  1. 创建 STUN 客户端收集候选地址
  2. 简化实现:直接连接到第一个候选地址
  3. TODO: 完整的 ICE 候选交换和连通性检查

Phase 3: proto/core.proto

职责gRPC 服务接口定义

创建的文件

  • proto/core.proto (97 行)

服务定义

service CoreService {
    rpc CreateCore(CreateCoreRequest) returns (CreateCoreResponse);
    rpc Start(StartRequest) returns (StartResponse);
    rpc Stop(StopRequest) returns (StopResponse);
    rpc Bind(BindRequest) returns (BindResponse);
    rpc GetStatus(GetStatusRequest) returns (GetStatusResponse);
    rpc UpdateConfig(UpdateConfigRequest) returns (UpdateConfigResponse);
}

Phase 4: proto/core_grpc.go

职责gRPC 服务实现

移动的文件

  • core_service_server.goproto/core_grpc.go

提供的 API

type CoreServiceServer struct { ... }

func NewCoreServiceServer(core *Core, logger *zap.Logger) *CoreServiceServer
func (s *CoreServiceServer) CreateCore(...) (*proto.CreateCoreResponse, error)
func (s *CoreServiceServer) Start(...) (*proto.StartResponse, error)
func (s *CoreServiceServer) Stop(...) (*proto.StopResponse, error)
func (s *CoreServiceServer) Bind(...) (*proto.BindResponse, error)
func (s *CoreServiceServer) GetStatus(...) (*proto.GetStatusResponse, error)
func (s *CoreServiceServer) UpdateConfig(...) (*proto.UpdateConfigResponse, error)

📊 当前状态统计

已完成

文件 行数 状态 说明
connect/stun.go 120 完成 STUN 协议实现
connect/direct.go 86 完成 Direct-UDP 工厂
proto/core.proto 97 完成 gRPC 接口定义
proto/core_grpc.go 163 完成 gRPC 服务实现

待完善

文件 当前状态 需要完成
connect/turn.go 62 行(框架) 添加完整 TURN 协议实现
connect/ws.go 现有 添加完整 WS 协议实现
connect/ice.go 现有 更新为调用新的 stun.go
core.go 现有 修复旧 API 引用

🎯 下一步行动

P0 - 立即执行

  1. 更新 ice.go

    // 改为调用新的 stun.go
    stun := connect.NewSTUNClient(servers, logger)
    candidates := stun.CollectCandidates()
    
  2. 生成 proto 代码

    protoc --go_out=. --go-grpc_out=. core/proto/core.proto
    
  3. 修复 core.go

    • 更新对 client/ 的引用
    • 使用新的 connect/stun.go

P1 - 后续完善

  1. 完善 turn.go

    func DialTURN(server, username, password, network string) (net.Conn, error) {
        // 1. Allocate
        // 2. CreatePermission  
        // 3. ChannelBind
        // 4. 返回 net.Conn
    }
    
  2. 完善 ws.go

    func DialWS(server, path string, useTLS bool, engineID, peerKey string) (net.Conn, error) {
        // 1. Handshake
        // 2. Identify
        // 3. 返回 net.Conn
    }
    

更新时间:2026-03-24 02:30
版本:v2.2.0
状态: Phase 1-4 完成,继续重构中