# Core 重构 Phase 2 进度报告

## ✅ 已完成

### 1. connect/stun.go 重构完成

**修改内容**：
- ❌ 删除重复的 `STUNClient` 结构体（约 100 行代码）
- ❌ 删除 `queryServer()` 等底层 STUN 协议实现
- ✅ 改为调用 `client/stun_client.go` 的 `GetExternalIP()` 方法

**重构对比**：
```go
// 修改前：connect 自己实现 STUN 客户端
type STUNClient struct { ... }
func (c *STUNClient) GetExternalAddress() { ... }

// 修改后：调用 client 层的协议客户端
stun := client.NewSTUNClient(servers, logger)
result := stun.GetExternalIP()
```

**删除行数**: ~95 行  
**新增行数**: ~5 行（import + 调用）  
**净减少**: -90 行 ✅

---

## ⏳ 待完成

### 2. connect/turn_udp.go 重构（进行中）

**当前状态**：
- ❌ 包含完整的 TURNClient 实现（167 行）
- ❌ 包含 allocateUDP/allocateTCP 等底层协议逻辑
- ✅ 需要改为调用 `client/turn_client.go`

**重构方案**：
```go
// 修改前：connect 自己实现 TURN 客户端
type TURNClient struct { ... }
func (c *TURNClient) Allocate() { ... } // 167 行实现

// 修改后：调用 client 层的协议客户端
turn := client.NewTURNClient(config)
relayConn := turn.Allocate()
return NewTURNConn(relayConn), nil
```

**预计删除**: ~350 行  
**预计新增**: ~20 行  
**净减少**: -330 行

---

### 3. 其他待清理的文件

#### fake_tcp.go / real_tcp.go
- ✅ 保持现状（已经是工厂模式）
- ℹ️ 这两个文件是真正的建连逻辑，不需要调用 client/

#### ws.go
- ⏳ 检查是否有重复的 WSClient 实现
- 🔄 如果需要，改为调用 `client/ws_client.go`

---

## 📊 重构收益统计

| 文件 | 修改前行数 | 修改后行数 | 净减少 | 状态 |
|------|-----------|-----------|--------|------|
| `connect/stun.go` | 180 | 85 | -95 | ✅ 完成 |
| `connect/turn_udp.go` | 409 | ~60 | -349 | ⏳ 进行中 |
| `fake_tcp_factory.go` | 55 | 0 | -55 | ✅ 已删除 |
| `real_tcp_factory.go` | 55 | 0 | -55 | ✅ 已删除 |
| **总计** | **699** | **~145** | **-554** | - |

---

## 🎯 下一步行动

1. **立即执行**: 重构 `connect/turn_udp.go`
   - 删除 TURNClient 完整实现
   - 简化为调用 client/turn_client.go
   - 只保留 TURNFactory.Dial() 逻辑

2. **验证编译**: 
   ```bash
   go build ./core/connect
   go build ./core
   ```

3. **更新文档**:
   - 在 README 中说明新的目录结构
   - 更新 core 分层架构文档

---

*创建时间：2026-03-24 00:45*  
*Phase 2 进度：1/3 完成*
