4.4 KiB
4.4 KiB
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 优先尝试直连
实现细节:
- 创建 STUN 客户端收集候选地址
- 简化实现:直接连接到第一个候选地址
- 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.go→proto/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 - 立即执行
-
更新 ice.go ⏳
// 改为调用新的 stun.go stun := connect.NewSTUNClient(servers, logger) candidates := stun.CollectCandidates() -
生成 proto 代码 ⏳
protoc --go_out=. --go-grpc_out=. core/proto/core.proto -
修复 core.go ⏳
- 更新对
client/的引用 - 使用新的
connect/stun.go
- 更新对
P1 - 后续完善
-
完善 turn.go ⏳
func DialTURN(server, username, password, network string) (net.Conn, error) { // 1. Allocate // 2. CreatePermission // 3. ChannelBind // 4. 返回 net.Conn } -
完善 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 完成,继续重构中