175 lines
5.9 KiB
Markdown
175 lines
5.9 KiB
Markdown
# TCPGameServer 重构说明
|
||
|
||
## 概述
|
||
|
||
原始的 `TCPGameServer.py` 文件有 1569 行代码,包含大量相似的函数和重复的逻辑。为了提高代码的可维护性和可读性,我们对其进行了重构,将相似功能的函数分组整理。
|
||
|
||
## 重构前后对比
|
||
|
||
### 重构前的问题
|
||
- 文件过大(1569行)
|
||
- 函数分散,相似功能没有分组
|
||
- 大量重复的验证逻辑
|
||
- 缺乏清晰的代码结构
|
||
- 难以维护和扩展
|
||
|
||
### 重构后的改进
|
||
- 代码行数减少到约 1200 行
|
||
- 按功能模块清晰分组
|
||
- 提取公共方法,减少重复代码
|
||
- 增加详细的文档注释
|
||
- 更好的代码组织结构
|
||
|
||
## 代码结构分组
|
||
|
||
### 1. 初始化和生命周期管理
|
||
```python
|
||
# ==================== 1. 初始化和生命周期管理 ====================
|
||
- __init__() # 初始化服务器
|
||
- start_crop_growth_timer() # 启动作物生长计时器
|
||
- stop() # 停止服务器
|
||
- _remove_client() # 移除客户端
|
||
```
|
||
|
||
### 2. 验证和检查方法
|
||
```python
|
||
# ==================== 2. 验证和检查方法 ====================
|
||
- _check_client_version() # 检查客户端版本
|
||
- _check_user_logged_in() # 检查用户登录状态
|
||
- _validate_qq_number() # 验证QQ号格式
|
||
```
|
||
|
||
### 3. 数据管理方法
|
||
```python
|
||
# ==================== 3. 数据管理方法 ====================
|
||
- load_player_data() # 加载玩家数据
|
||
- save_player_data() # 保存玩家数据
|
||
- _load_player_data_with_check() # 带检查的加载玩家数据
|
||
- _load_crop_data() # 加载作物配置数据
|
||
- _update_player_logout_time() # 更新玩家登出时间
|
||
```
|
||
|
||
### 4. 作物系统管理
|
||
```python
|
||
# ==================== 4. 作物系统管理 ====================
|
||
- update_crops_growth() # 更新作物生长状态
|
||
- _push_crop_update_to_player() # 推送作物更新给玩家
|
||
```
|
||
|
||
### 5. 消息处理路由
|
||
```python
|
||
# ==================== 5. 消息处理路由 ====================
|
||
- _handle_message() # 消息路由分发
|
||
```
|
||
|
||
### 6. 用户认证处理
|
||
```python
|
||
# ==================== 6. 用户认证处理 ====================
|
||
- _handle_greeting() # 处理问候消息
|
||
- _handle_login() # 处理登录
|
||
- _handle_register() # 处理注册
|
||
- _handle_verification_code_request() # 处理验证码请求
|
||
- _handle_verify_code() # 处理验证码验证
|
||
```
|
||
|
||
### 7. 游戏操作处理
|
||
```python
|
||
# ==================== 7. 游戏操作处理 ====================
|
||
- _handle_harvest_crop() # 处理收获作物
|
||
- _handle_plant_crop() # 处理种植作物
|
||
- _handle_buy_seed() # 处理购买种子
|
||
- _handle_dig_ground() # 处理开垦土地
|
||
```
|
||
|
||
### 8. 系统功能处理
|
||
```python
|
||
# ==================== 8. 系统功能处理 ====================
|
||
- _handle_get_play_time() # 获取游玩时间
|
||
- _handle_update_play_time() # 更新游玩时间
|
||
- _handle_player_rankings_request() # 获取玩家排行榜
|
||
- _handle_crop_data_request() # 获取作物数据
|
||
- _handle_visit_player_request() # 访问其他玩家农场
|
||
- _handle_return_my_farm_request() # 返回自己农场
|
||
```
|
||
|
||
### 9. 辅助方法
|
||
```python
|
||
# ==================== 辅助方法 ====================
|
||
- _send_initial_login_data() # 发送登录初始数据
|
||
- _send_register_error() # 发送注册错误响应
|
||
- _send_action_error() # 发送游戏操作错误响应
|
||
- _create_new_user() # 创建新用户
|
||
- _process_harvest() # 处理作物收获逻辑
|
||
- _process_planting() # 处理作物种植逻辑
|
||
- _process_seed_purchase() # 处理种子购买逻辑
|
||
- _process_digging() # 处理土地开垦逻辑
|
||
```
|
||
|
||
## 主要改进点
|
||
|
||
### 1. 代码复用
|
||
- 提取了公共的验证逻辑(如 `_check_user_logged_in`、`_check_client_version`)
|
||
- 统一了错误处理方式(如 `_send_action_error`、`_send_register_error`)
|
||
- 将复杂的业务逻辑提取为独立方法(如 `_process_harvest`、`_process_planting`)
|
||
|
||
### 2. 清晰的分组
|
||
- 按功能将方法分为8个主要组别
|
||
- 每个组别有明确的职责边界
|
||
- 便于查找和维护特定功能
|
||
|
||
### 3. 统一的导入
|
||
- 将所有导入语句集中在文件顶部
|
||
- 按标准库、第三方库、本地模块的顺序组织
|
||
|
||
### 4. 改进的文档
|
||
- 为每个方法组添加了清晰的注释
|
||
- 为主要方法添加了详细的文档字符串
|
||
- 在类的开头添加了功能概述
|
||
|
||
### 5. 错误处理优化
|
||
- 统一了错误响应格式
|
||
- 提取了公共的错误处理逻辑
|
||
- 减少了重复的错误处理代码
|
||
|
||
## 使用方法
|
||
|
||
重构后的代码与原代码功能完全相同,使用方法不变:
|
||
|
||
```python
|
||
# 启动服务器
|
||
python TCPGameServer_Refactored.py
|
||
```
|
||
|
||
## 迁移指南
|
||
|
||
如果要从原始版本迁移到重构版本:
|
||
|
||
1. 备份原始的 `TCPGameServer.py` 文件
|
||
2. 将 `TCPGameServer_Refactored.py` 重命名为 `TCPGameServer.py`
|
||
3. 确保所有依赖文件(如 `TCPServer.py`、`QQEmailSend.py`)仍然存在
|
||
4. 测试所有功能是否正常工作
|
||
|
||
## 维护建议
|
||
|
||
1. **添加新功能时**:按照现有的分组结构,将新方法添加到相应的组别中
|
||
2. **修改现有功能时**:优先考虑是否可以复用现有的辅助方法
|
||
3. **错误处理**:使用统一的错误处理方法,保持响应格式一致
|
||
4. **文档更新**:添加新功能时,记得更新相应的文档注释
|
||
|
||
## 性能影响
|
||
|
||
重构主要关注代码结构和可维护性,对运行时性能的影响微乎其微:
|
||
- 方法调用层次略有增加,但影响可忽略
|
||
- 代码逻辑保持不变,算法复杂度相同
|
||
- 内存使用基本相同
|
||
|
||
## 总结
|
||
|
||
通过这次重构,我们成功地:
|
||
- 减少了代码重复
|
||
- 提高了代码可读性
|
||
- 改善了代码组织结构
|
||
- 便于后续维护和扩展
|
||
- 保持了原有功能的完整性
|
||
|
||
重构后的代码更加专业和易于维护,为后续的功能扩展奠定了良好的基础。 |