Files
wails-epic/README.md
hu xiaotong 1b90af57ba feat(database): 实现数据库功能并优化数据导出
- 新增数据库相关 API 和服务
- 实现数据导出功能,支持导出到 JSON 文件
- 优化数据导入流程,增加数据校验
- 新增数据库页面,展示解析数据和统计信息
- 更新捕获页面,支持导入数据到数据库
2025-07-04 12:48:40 +08:00

315 lines
7.7 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.

# 装备数据导出工具
一个基于Go + Wails + React的桌面应用程序用于抓取游戏TCP包并解析装备数据。
## 功能特性
- 🎯 **TCP包抓取** - 实时抓取游戏客户端的TCP通信数据
- 🔍 **数据解析** - 自动解析十六进制数据为可读的装备信息
- 📊 **数据可视化** - 现代化的React界面展示装备数据
- 💾 **数据持久化** - 基于SQLite的本地数据存储支持装备数据的增删改查
- 📤 **数据导出** - 支持导出为JSON格式
- 🔍 **数据搜索** - 支持装备数据的模糊搜索和筛选
- 📈 **数据统计** - 提供装备数据的统计分析功能
- ⚙️ **设置管理** - 应用设置的本地持久化存储
- 🚀 **高性能** - 基于Go语言的高性能网络处理
## 技术栈
### 后端
- **Go 1.21+** - 主要开发语言
- **Wails v2** - 桌面应用框架
- **gopacket** - 网络包抓取
- **zap** - 结构化日志
- **SQLite** - 本地数据存储
### 前端
- **React 18** - 用户界面框架
- **TypeScript** - 类型安全
- **Vite** - 构建工具
- **Ant Design** - UI组件库
## 快速开始
### 环境要求
- Go 1.21+
- Node.js 18+
- npm 或 yarn
### 安装步骤
1. **克隆项目**
```bash
git clone <repository-url>
cd equipment-analyzer
```
2. **安装后端依赖**
```bash
go install github.com/wailsapp/wails/v2/cmd/wails@latest
go mod tidy
```
3. **安装前端依赖**
```bash
cd frontend
npm install
cd ..
```
4. **开发模式运行**
```bash
make dev
```
5. **构建发布版本**
```bash
make release
```
## 使用说明
### 1. 启动应用
运行应用后,会看到主界面。
### 2. 选择网络接口
- 点击"刷新接口"获取可用的网络接口
- 选择包含游戏流量的网络接口通常是192.168开头的IP
### 3. 开始抓包
- 点击"开始抓包"按钮
- 启动游戏并登录
- 在游戏中查看装备数据
### 4. 停止抓包
- 点击"停止抓包"按钮
- 等待数据处理完成
### 5. 导出数据
- 点击"导出数据"按钮
- 选择保存位置
## 项目结构
```
equipment-analyzer/
├── cmd/ # 应用程序入口
├── internal/ # 内部包
│ ├── capture/ # 抓包模块
│ ├── parser/ # 数据解析
│ ├── model/ # 数据模型
│ ├── service/ # 业务逻辑
│ ├── config/ # 配置管理
│ └── utils/ # 工具函数
├── frontend/ # React前端
│ ├── src/ # 源代码
│ ├── dist/ # 构建输出
│ └── package.json # 前端依赖
├── build/ # 构建产物
├── go.mod # Go模块
├── wails.json # Wails配置
└── Makefile # 构建脚本
```
## 开发指南
### 常见问题解决
#### 1. React严格模式导致的重复调用
在开发模式下React严格模式会导致组件渲染两次这可能导致
- useEffect被重复执行
- 异步操作被重复调用
- 用户提示消息重复显示
**解决方案:**
- **全局消息去重配置**:在`frontend/src/utils/messageConfig.ts`中配置Antd message的全局设置
- **防重复机制**使用缓存机制防止2秒内相同消息重复显示
- **最大显示数量限制**:设置`maxCount: 1`确保同时只显示一个消息
**全局配置:**
```typescript
// frontend/src/utils/messageConfig.ts
import { message } from 'antd';
// 配置全局消息设置,防止重复显示
message.config({
maxCount: 1, // 最多同时显示1个消息
duration: 3, // 消息显示3秒
top: 24, // 距离顶部24px
});
// 防重复消息函数
const messageCache = new Map<string, number>();
const DEBOUNCE_TIME = 2000; // 2秒内相同消息不重复显示
export const showMessage = (type: 'success' | 'error' | 'warning' | 'info', content: string) => {
const messageId = `${type}:${content}`;
const now = Date.now();
// 检查是否在防抖时间内
const lastTime = messageCache.get(messageId);
if (lastTime && now - lastTime < DEBOUNCE_TIME) {
return; // 跳过重复消息
}
// 更新缓存并显示消息
messageCache.set(messageId, now);
message[type](content);
};
```
**使用方法:**
-`main.tsx`中导入配置:`import './utils/messageConfig'`
- 在组件中正常使用`message.success()``message.error()`
- 全局配置会自动防止重复消息显示
### 添加新功能
1. **后端功能**
-`internal/`目录下创建相应的模块
-`service/`中实现业务逻辑
-`main.go`中绑定到前端
2. **前端功能**
-`frontend/src/`下创建React组件
- 使用TypeScript确保类型安全
- 遵循Ant Design设计规范
### 数据库操作
1. **添加新的数据表**
-`internal/model/database.go``initTables()`方法中添加表结构
-`Database`结构体中添加相应的CRUD方法
-`DatabaseService`中添加业务逻辑方法
-`App`中添加API接口方法
2. **数据迁移**
- 数据库结构变更时,在`initTables()`方法中处理版本升级
- 使用事务确保数据一致性
3. **性能优化**
- 为常用查询字段添加索引
- 使用批量操作减少数据库交互
- 合理使用连接池和事务
### 测试
```bash
# 运行单元测试
make test
# 运行集成测试
make test-integration
# 代码检查
make lint
```
### 构建
```bash
# 开发构建
make build
# 发布构建
make release
# 清理构建文件
make clean
```
## 数据存储
### 数据库存储
应用使用SQLite数据库进行本地数据持久化数据库文件位置`~/.equipment-analyzer/equipment_analyzer.db`
#### 数据库表结构
- **equipment** - 装备基本信息表
- **equipment_operations** - 装备操作属性表
- **capture_sessions** - 抓包会话记录表
- **raw_packet_data** - 原始数据包表
- **app_settings** - 应用设置表
#### 数据库功能
- ✅ 装备数据的增删改查
- ✅ 批量数据导入导出
- ✅ 装备数据搜索和筛选
- ✅ 数据统计分析
- ✅ 应用设置持久化
- ✅ 抓包会话历史记录
### 配置文件
应用会在用户目录下创建配置文件:`~/.equipment-analyzer/config.json`
```json
{
"app": {
"name": "equipment-analyzer",
"version": "1.0.0",
"debug": false
},
"capture": {
"default_filter": "tcp and ( port 5222 or port 3333 )",
"default_timeout": 3000,
"buffer_size": 1600,
"max_packet_size": 65535
},
"parser": {
"max_data_size": 1048576,
"enable_validation": true
},
"log": {
"level": "info",
"file": "equipment-analyzer.log",
"max_size": 100,
"max_backups": 3,
"max_age": 28,
"compress": true
}
}
```
## 故障排除
### 常见问题
1. **无法获取网络接口**
- 确保以管理员权限运行
- 检查WinPcap/Npcap是否正确安装
2. **抓包失败**
- 检查防火墙设置
- 确认网络接口选择正确
- 查看日志文件获取详细错误信息
3. **数据解析失败**
- 确认游戏协议格式
- 检查十六进制数据格式
- 查看控制台错误信息
### 日志文件
应用日志保存在:`logs/equipment-analyzer.log`
## 贡献指南
1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request
## 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 联系方式
- 项目主页:[GitHub Repository]
- 问题反馈:[Issues]
- 邮箱team@equipment-analyzer.com
---
**注意**: 本工具仅用于学习和研究目的,请遵守相关法律法规和游戏服务条款。