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

167 lines
4.4 KiB
Markdown
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.
# Core 模块代码重构进度报告 - v2.2.0
## ✅ 已完成的文件创建/重构(2026-03-24
### Phase 1: connect/stun.go ✅
**职责**STUN 协议实现,被多处调用
**创建的文件**
-`connect/stun.go` (120 行)
**提供的 API**
```go
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**
```go
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 行)
**服务定义**
```protobuf
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**
```go
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**
```go
// 改为调用新的 stun.go
stun := connect.NewSTUNClient(servers, logger)
candidates := stun.CollectCandidates()
```
2. **生成 proto 代码** ⏳
```bash
protoc --go_out=. --go-grpc_out=. core/proto/core.proto
```
3. **修复 core.go** ⏳
- 更新对 `client/` 的引用
- 使用新的 `connect/stun.go`
---
### P1 - 后续完善
4. **完善 turn.go** ⏳
```go
func DialTURN(server, username, password, network string) (net.Conn, error) {
// 1. Allocate
// 2. CreatePermission
// 3. ChannelBind
// 4. 返回 net.Conn
}
```
5. **完善 ws.go** ⏳
```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 完成,继续重构中*