# 云算力平台客户端 - Windows / Linux 桌面应用

基于 Flutter 开发的 Windows 桌面客户端应用，实现与云算力平台的通信、挖矿管理等功能。

## 功能特性

### 1. 主界面信息显示

主界面实时显示以下信息：

- **版本号**：从 `bin/version` 文件读取
- **身份信息**：从 `grownishinaMi6ựcnhfi열려있경윤فظ했습니다치geck` (修正示例，实际为 `bin/auth`) 文件读取
- **GPU 信息**：通过 `nvidia-smi` 命令自动检测（启动时获取一次）
  - 显示 GPU索引、品牌、型号、显存大小
- **硬盘身份码**：通过 `wmic diskdrive get serialnumber` 命令获取
- **当前状态**：实时显示客户端连接状态\n  - 🔴 **离线**：心跳异常，红色指示\n  - 🟢 **在线**：心跳正常，绿色指示\n  - 🟡 **挖矿中**：租约挖矿进行中，黄色指示\n  - 🔵 **持续挖矿中**：持续挖矿任务进行中，蓝色指示\n

### 2. 版本更新功能

- 自动检查远程版本（从配置的 `update_url` 获取）
- 发现新版本时显示更新提示卡片
- 支持一键下载并更新客户端
- 更新完成后在下次启动时自动应用

### 3. 主要功能按钮

#### 3.1 查看日志
- 实时动态显示客户端日志
- 支持自动滚动和手动滚动
- 可刷新和清空日志
- 日志文件位置：`bin/logs/client.log`

#### 3.2 查看/修改配置
- **表单式配置编辑**：采用输入框形式，而非直接文本编辑
- 每个配置项都有复选框，勾选后才能编辑
- 按配置节分组显示：
  - 客户端配置（server_url, update_url）
  - LolMiner 配置
  - Rigel 配置
  - BzMiner 配置
  - 代理配置
  - 持续挖矿配置
- 配置文件位置：`bin/mining.windows.conf`
- 修改后需点击保存按钮保存更改

#### 3.3 挖矿信息
- **按钮状态**：一直显示，但只有在挖矿中状态时才能点击
- 显示当前挖矿任务的详细信息：
  - 币种、算法、矿池、矿池地址
  - 钱包地址、矿工号
  - 挖矿软件、进程ID
  - 任务结束时间、剩余时间
- **实时日志显示**：
  - 显示挖矿软件的标准输出和错误输出
  - 支持自动滚动和手动滚动
  - 可清空日志
  - 日志格式与外部查看日志布局相似

#### 3.4 重启
- 点击后显示确认对话框
- 重启过程中显示加载动画，禁用所有操作
- 重启完成后显示成功/失败结果提示
- 自动重新初始化所有服务

#### 3.5 退出程序
- 点击后显示确认对话框
- 确认后安全退出应用程序

## 技术架构

### 核心模块

- **ClientCore**：TCP 通信核心，处理与服务器的连接、心跳、消息收发
- **MiningManager**：挖矿软件管理，支持 lolminer、rigel、bzminer
- **SustainMiner**：持续挖矿管理，在无租约期间自动挖矿
- **SystemInfoService**：系统信息获取（GPU、硬盘序列号等）
- **ConfigService**：配置文件管理（INI 格式）
- **UpdateService**：版本检查和更新管理
- **DatabaseService**：SQLite 数据库，存储挖矿任务历史
- **LogService**：日志文件管理

### 数据存储

- **配置文件**：`bin/mining.windows.conf`（INI 格式）
- **身份文件**：`bin/auth`
- **版本文件**：`bin/version`
- **数据库**：`bin/mining_task.db`（SQLite）
- **日志文件**：`bin/logs/client.log`

### 通信协议

- **协议**：TCP Socket
- **消息格式**：JSON，每行一条消息
- **心跳机制**：服务器发送 ping，客户端回复 pong
- **身份认证**：格式为 `身份信息::硬盘身份码`

## 配置文件说明

配置文件 `bin/mining.windows.conf` 采用 INI 格式，包含以下配置节：

### [client]
- `server_url`：服务器地址（RabbitMQ 通信目标）
- `update_url`：更新服务器地址（用于版本检查和更新）

### [lolminer] / [rigel] / [bzminer]
- `path`：挖矿软件路径（使用双反斜杠 `\\`）

### [proxy]
- `proxy`：是否启用代理（true/false）

### [sustain]
- `enabled`：是否启用持续挖矿
- `algo`：算法
- `coin`：币种
- `miner`：挖矿软件名
- `pool_url`：矿池地址
- `wallet`：钱包地址
- `worker_id`：矿工号
- `pool_user`：矿池用户名（可选）
- `wallet_mining`：是否使用钱包挖矿

## 部署说明

### 开发环境

1. 确保已安装 Flutter SDK 并启用 Windows 桌面支持
2. 在 `windows` 目录下运行：
   ```bash
   flutter pub get
   flutter run -d windows
   ```

### 发布版本

1. 构建发布版本：
   ```bash
   flutter build windows --release
   ```

2. 部署文件结构：
   ```
   cloud_client_gui.exe
   bin/
     ├── version          # 版本文件（必需）
     ├── auth             # 身份信息文件（必需）
     ├── mining.windows.conf  # 配置文件（必需）
     ├── logs/
     │   └── client.log   # 日志文件（自动创建）
     └── mining_task.db   # 数据库文件（自动创建）
   ```

3. **重要**：`bin` 文件夹必须与 `.exe` 文件在同一目录下

## 路径说明

- **开发模式**：程序会自动检测并定位到 `windows/bin` 目录
- **发布模式**：`bin` 文件夹应与可执行文件在同一目录
- 所有文件路径都基于可执行文件所在目录自动计算

## 依赖项

主要依赖包：
- `provider`：状态管理
- `sqflite_common_ffi`：SQLite 数据库（Windows 桌面）
- `ini`：INI 文件解析
- `http`：HTTP 请求（版本更新）
- `logging`：日志系统
- `path`：路径处理

## 注意事项

1. 首次运行需要确保 `bin` 目录下存在 `version` 和 `auth` 文件
2. GPU 信息只在程序启动时获取一次，避免频繁调用系统命令
3. 配置文件修改后需要保存才能生效
4. 重启功能会重新初始化所有服务，可能需要几秒钟时间
5. 挖矿信息按钮在非挖矿状态下会显示为灰色且不可点击

## 开发说明

本项目是基于 Go 客户端功能完全重新实现的 Flutter Windows 桌面应用，实现了与 Go 版本相同的所有核心功能，包括：
- TCP 通信和心跳机制
- 挖矿软件管理
- 持续挖矿支持
- 系统信息获取
- 配置管理
- 版本更新
