From d9aea03e36b5ba5bf928be9ff626521a6a011a19 Mon Sep 17 00:00:00 2001 From: zzz <1638644816@qq.com> Date: Thu, 8 May 2025 18:27:17 +0800 Subject: [PATCH] Commit Commit --- .obsidian/workspace.json | 43 +-- TODO.canvas | 10 + TODO.md | 1 - Timeline TODO.canvas | 2 +- 用户卡及游戏信息处理过程设计文档.md | 405 ++++++++++++++++++++++++++++ 5 files changed, 430 insertions(+), 31 deletions(-) create mode 100644 TODO.canvas delete mode 100644 TODO.md create mode 100644 用户卡及游戏信息处理过程设计文档.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 585b56b..817a1f8 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -10,36 +10,21 @@ { "id": "4e6788fa2bacf67e", "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "战斗/写代码的诗人/战斗系统:状态配置管理(技能配置管理).md", - "mode": "source", - "source": false - }, - "icon": "lucide-file", - "title": "战斗系统:状态配置管理(技能配置管理)" - } - }, - { - "id": "a641fc3e9f5fe08c", - "type": "leaf", "state": { "type": "canvas", "state": { - "file": "Timeline TODO.canvas", + "file": "TODO.canvas", "viewState": { - "x": -515, - "y": -500, + "x": -654, + "y": -403.5, "zoom": 0 } }, "icon": "lucide-layout-dashboard", - "title": "Timeline TODO" + "title": "TODO" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -217,13 +202,18 @@ "copilot:Open Copilot Chat": false } }, - "active": "a641fc3e9f5fe08c", + "active": "4e6788fa2bacf67e", "lastOpenFiles": [ - "TODO.canvas", "Timeline TODO.canvas", - "战斗/写代码的诗人/战斗系统:技能实现架构.md", - "用户卡及游戏信息处理过程设计文档.md", + "TODO.canvas", "战斗/写代码的诗人/战斗系统:状态配置管理(技能配置管理).md", + "战斗/战斗系统 - 3C相关.md", + "战斗/游戏知识学习——【战斗系统】.md", + "战斗/独立游戏-万字解析游戏战斗系统开发.md", + "战斗/动作.md", + "网络同步.md", + "用户卡及游戏信息处理过程设计文档.md", + "战斗/写代码的诗人/战斗系统:技能实现架构.md", "战斗/写代码的诗人/战斗系统:属性管理.md", "战斗/写代码的诗人/战斗系统:什么是数据驱动?.md", "战斗/写代码的诗人/战斗系统:框架设计—战斗视角的GameObject.md", @@ -233,7 +223,6 @@ "AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第二个用法|私人智囊团/我的侧写档案.md", "战斗/写代码的诗人", "TODO.md", - "战斗/独立游戏-万字解析游戏战斗系统开发.md", "性能优化/关于Unity加载优化,你可能遇到这些问题 - 知乎.md", "性能优化/批量渲染 数字UI.md", "AI for Obsidian/插件相关说明/Copilot 插件使用说明.md", @@ -243,11 +232,7 @@ "AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第二个用法|私人智囊团/我的长文参考/2016 年终总结.md", "AI for Obsidian/第二个用法|私人智囊团/我的长文参考/2024 年 - 聊聊近况 | 二一的笔记 001.md", "AI for Obsidian/第二个用法|私人智囊团/我的长文参考/2022 年 - 我的 B 站运营指南.md", - "AI for Obsidian/第二个用法|私人智囊团/我的长文参考/2016 年终总结.md", - "AI for Obsidian/第二个用法|私人智囊团/注意事项.md", "AI for Obsidian/第二个用法|私人智囊团/我的长文参考", - "AI for Obsidian/第二个用法|私人智囊团/我的侧写档案.md", - "AI for Obsidian/第二个用法|私人智囊团/心理侧写 Prompt.md", "AI for Obsidian/第二个用法|私人智囊团", "AI for Obsidian/插件相关说明", "AI for Obsidian/20250315 - 测试 Obsidian+ AI 的能力边界/第四个用法|成为对弈的棋手/正方观点/观点9.md.edtz", diff --git a/TODO.canvas b/TODO.canvas new file mode 100644 index 0000000..edd0fab --- /dev/null +++ b/TODO.canvas @@ -0,0 +1,10 @@ +{ + "nodes":[ + {"id":"c2a9a261abbf026a","type":"text","text":"# rogulite\n\n分好武器、招式\n->构建->抽卡\n动画表现\n表演->大招、出场\n->timeline\n","x":-400,"y":-637,"width":250,"height":234,"color":"2"}, + {"id":"fd504a901787835c","type":"text","text":"# 宠物\n\n","x":-1080,"y":-586,"width":250,"height":367,"color":"4"}, + {"id":"09d19f9a3b86463f","x":-760,"y":-880,"width":250,"height":326,"type":"text","text":"# 优化项\n\n\n地图地板图片导入 自动修改图片大小\n\n将RoomConfig改到RoomBase里\n"} + ], + "edges":[ + {"id":"abda214f71bdc137","fromNode":"09d19f9a3b86463f","fromSide":"bottom","toNode":"fd504a901787835c","toSide":"right"} + ] +} \ No newline at end of file diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 8b13789..0000000 --- a/TODO.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Timeline TODO.canvas b/Timeline TODO.canvas index 5b2bbc7..d028b9a 100644 --- a/Timeline TODO.canvas +++ b/Timeline TODO.canvas @@ -1,7 +1,7 @@ { "nodes":[ {"id":"ed3d4299af3c74e1","type":"text","text":"# BUG\n\n拖拽BoxSpan在滚动之后异常","x":-220,"y":-740,"width":250,"height":480}, - {"id":"0d8282c969461d99","type":"text","text":"# 目前\n\n支持输入监听配置\n支持技能编辑控制AOE范围\n\n人物动作可视化帧打击范围\n\n需要支持删除操作\n支持粘贴板操作","x":-1060,"y":-740,"width":250,"height":480,"color":"1"}, + {"id":"0d8282c969461d99","type":"text","text":"# 目前\n\n支持输入监听配置\n\n\n\n需要支持删除操作\n支持粘贴板操作\n\n实际的敌人\n","x":-1060,"y":-740,"width":250,"height":480,"color":"1"}, {"id":"9ac5e140a1fddd90","type":"text","text":"# 重要\n\n滚轮缩放控制帧间隔宽度\n帧位置跟随宽度变化\n\n相机状态切换\n屏幕震动\n卡帧时间","x":-780,"y":-740,"width":250,"height":480,"color":"2"}, {"id":"d0bcb2652c1d4cbf","type":"text","text":"# 低优先","x":-500,"y":-740,"width":250,"height":480,"color":"4"} ], diff --git a/用户卡及游戏信息处理过程设计文档.md b/用户卡及游戏信息处理过程设计文档.md new file mode 100644 index 0000000..5216c20 --- /dev/null +++ b/用户卡及游戏信息处理过程设计文档.md @@ -0,0 +1,405 @@ +# 用户卡信息处理系统设计文档 + +## 1. 系统概述 + +该系统主要由控制器插件、业务插件和游戏端三部分组成,通过TCP通信实现用户卡信息处理和游戏数据收集。 + +## 2. 系统架构 + +### 字符流程图 +``` ++----------------+ +----------------+ +----------------+ +| 控制器插件 | | 业务插件 | | 游戏端 | +| | | | | | +| - 扫描用户卡 | | - 处理用户信息 | | - 接收用户信息 | +| - 读取卡信息 |--->| - 存储本地数据 |<-->| - 发送游戏信息 | +| - 通知业务插件 | | - 网络请求处理 | | - 本地备份处理 | ++----------------+ +----------------+ +----------------+ + | ^ + v | + +-----------------+ + | 服务器 | + | - 用户资料数据库 | + | - 游戏数据处理 | + +-----------------+ +``` + +### mermaid流程图 +```mermaid +flowchart LR + A[控制器插件\n- 扫描用户卡\n- 读取卡信息\n- 通知业务插件] --> B[业务插件\n- 处理用户信息\n- 存储本地数据\n- 网络请求处理] + B <--> C[游戏端\n- 接收用户信息\n- 发送游戏信息\n- 本地备份处理] + B <--> D[服务器\n- 用户资料数据库\n- 游戏数据处理] +``` + +## 3. 系统详细流程 + +### 3.1 用户卡信息处理流程 + +#### 流程说明 +用户卡信息处理流程描述了从控制器插件扫描用户卡到业务插件向游戏端发送用户信息的完整过程。当控制器插件检测到用户卡扫描信息后,会通知业务插件。业务插件根据网络状态决定从服务器请求用户资料或从本地数据库读取用户信息。如果网络可用,业务插件会请求最新的用户信息并存储到本地;如果网络不可用或请求失败,则从本地SQLite数据库读取历史记录;若本地无记录,则构造默认用户信息。最终,业务插件将完整的用户信息通过TCP(12101端口)发送给游戏端。 + +#### 字符流程图 +``` ++----------------+ +----------------+ +----------------+ +----------------+ +| 控制器插件 | | 业务插件 | | 网络/本地数据库 | | 游戏端 | ++-------+--------+ +-------+--------+ +-------+--------+ +-------+--------+ + | | | | + | 扫描到用户卡 | | | + +--------------------->+ | | + | | | | + | | 检查网络状态 | | + | +--------------------->+ | + | | | | + | | 有网络: 请求用户信息 | | + | +--------------------->+ | + | | | | + | | 返回用户信息 | | + | +<---------------------+ | + | | | | + | | 无网络/请求失败: | | + | | 读取本地数据 | | + | +--------------------->+ | + | | | | + | | 返回本地数据 | | + | +<---------------------+ | + | | | | + | | 构造用户信息 | | + | +-------------------------------------------------+ + | | | | | + | | TCP(12101)发送用户信息| | | + | +--------------------->+--------------------->+ | + | | | | | + | | | | | + | | 本地存储用户信息 <---+ + | | | | ++-------+--------+ +-------+--------+ +-------+--------+ +-------+--------+ +``` + +#### mermaid流程图 +```mermaid +sequenceDiagram + participant 控制器插件 + participant 业务插件 + participant 网络/本地数据库 + participant 游戏端 + + 控制器插件->>业务插件: 扫描到用户卡 + 业务插件->>网络/本地数据库: 检查网络状态 + + alt 有网络 + 业务插件->>网络/本地数据库: 请求用户信息 + 网络/本地数据库-->>业务插件: 返回用户信息 + else 无网络/请求失败 + 业务插件->>网络/本地数据库: 读取本地数据 + 网络/本地数据库-->>业务插件: 返回本地数据 + end + + 业务插件->>业务插件: 构造用户信息 + 业务插件->>游戏端: TCP(12101)发送用户信息 + 游戏端->>游戏端: 本地存储用户信息 +``` + +### 3.2 游戏信息收集流程 + +#### 流程说明 +游戏信息收集流程描述了业务插件如何通过TCP监听接收游戏端发送的消息并进行处理的过程。业务插件监听TCP(12103端口)以接收来自游戏端的信息。根据接收到的消息类型(由标识头区分),业务插件会进行不同的处理:如果是游戏结束消息(标识头为"game-over"),业务插件会更新对应Player的状态,之后接收到该Player的游戏信息将不再与用户卡关联;如果是游戏业务信息,业务插件会尝试通过网络将数据发送到服务器,若网络不可用或发送失败,则将数据存储到本地SQLite数据库中以便稍后同步。 + +#### 字符流程图 +``` ++----------------+ +----------------+ +----------------+ +| 游戏端 | | 业务插件 | | 服务器/本地存储 | ++-------+--------+ +-------+--------+ +-------+--------+ + | | | + | TCP(12103)发送游戏信息| | + +--------------------->+ | + | | | + | | 检查消息类型 | + | +-----------------+ | + | | | | + | | 游戏结束消息 | | + | |-----------------+ | + | | 更新Player状态 | | + | +-----------------+ | + | | | | + | | 游戏业务信息 | | + | |-----------------+ | + | | 检查网络状态 | | + | +--------------------->+ + | | | + | | 有网络: 发送到服务器 | + | +--------------------->+ + | | | + | | 响应结果 | + | +<---------------------+ + | | | + | | 无网络/发送失败: | + | | 存储到本地SQLite | + | +--------------------->+ + | | | ++-------+--------+ +-------+--------+ +-------+--------+ +``` + +#### mermaid流程图 +```mermaid +sequenceDiagram + participant 游戏端 + participant 业务插件 + participant 服务器/本地存储 + + 游戏端->>业务插件: TCP(12103)发送游戏信息 + + alt 游戏结束消息 + 业务插件->>业务插件: 更新Player状态 + else 游戏业务信息 + 业务插件->>业务插件: 检查网络状态 + alt 有网络 + 业务插件->>服务器/本地存储: 发送到服务器 + 服务器/本地存储-->>业务插件: 响应结果 + else 无网络/发送失败 + 业务插件->>服务器/本地存储: 存储到本地SQLite + end + end +``` + +### 3.3 游戏信息发送失败处理流程 + +#### 流程说明 +游戏信息发送失败处理流程描述了当游戏端无法直接将游戏信息发送给业务插件时的备份处理机制。当游戏端向业务插件发送信息超时或无响应时,游戏端会将这些数据存储到特定目录中的文件系统,采用一条数据一个文件的方式。业务插件会定期检查该目录,读取这些文件中的数据,处理(如重新发送到服务器或记录到本地数据库)后再删除这些文件。这种机制确保了即使在业务插件暂时不可用的情况下,游戏数据也不会丢失,提高了系统的可靠性和容错性。 + +#### 字符流程图 +``` ++----------------+ +----------------+ +----------------+ +| 游戏端 | | 文件系统 | | 业务插件 | ++-------+--------+ +-------+--------+ +-------+--------+ + | | | + | 信息发送超时/无响应 | | + +-----------------+ | | + | | | | + | 创建数据文件 | | | + |----------------+ | | + | 将数据写入文件 | | | + +--------------------->+ | + | | | + | | 业务插件定期检查目录 | + | +<---------------------+ + | | | + | | 读取数据文件 | + | +--------------------->+ + | | | + | | 处理数据(重发/记录) | + | +<---------------------+ + | | | + | | 处理完成后删除文件 | + | +<---------------------+ + | | | ++-------+--------+ +-------+--------+ +-------+--------+ +``` + +#### mermaid流程图 +```mermaid +sequenceDiagram + participant 游戏端 + participant 文件系统 + participant 业务插件 + + 游戏端->>游戏端: 信息发送超时/无响应 + 游戏端->>游戏端: 创建数据文件 + 游戏端->>文件系统: 将数据写入文件 + 业务插件->>文件系统: 定期检查目录 + 文件系统->>业务插件: 读取数据文件 + 业务插件->>业务插件: 处理数据(重发/记录) + 业务插件->>文件系统: 处理完成后删除文件 +``` + +## 4. 信息结构 + +### 4.1 发送给游戏的用户信息JSON结构 + +```json +{ + "result": true, // 操作结果 + "errMsg": "", // 错误信息 + "statusCode": 0, // 状态码(0=成功,1=未绑定,2=无网) + "tag": "user-info", // 标识标签,区分不同类型的信息 + "data": { + "playerIndex": 1, // player索引 + "cardId": "123456", // 卡ID + "cardSn": "789012", // 卡序列号 + "userName": "张三", // 用户名称 + "userAvatar": "http://example.com/avatar.jpg" // 用户头像 + } +} +``` + +#### 4.1.1 请求服务器查询玩家资料 + 请求写入排行榜 +```json +{ + "tag": "update-user-info", // 标识标签,区分不同类型的信息 + "data": { + "cardId": "123456", // 卡ID + "score": 10000 //积分 + } +} +``` + 回复 +```json +{ + "result": true, // 操作结果 + "errMsg": "", // 错误信息 + "statusCode": 0, // 状态码(0=成功,1=未绑定,2=无网) + "tag": "", // 标识标签,区分不同类型的信息 + "data":{} +} +``` + + 请求查询玩家信息 +```json +{ + "tag": "select-user-info", // 标识标签,区分不同类型的信息 + "data": { + "cardId": "123456", // 卡ID + } +} +``` + 回复 +```json +{ + "result": true, // 操作结果 + "errMsg": "", // 错误信息 + "statusCode": 0, // 状态码(0=成功,1=未绑定,2=无网) + "tag": "user-info", // 标识标签,区分不同类型的信息 + "data": { + "playerIndex": 1, // player索引 + "cardId": "123456", // 卡ID + "cardSn": "789012", // 卡序列号 + "userName": "张三", // 用户名称 + "userAvatar": "http://example.com/avatar.jpg" // 用户头像 + ... + } +} +``` + +### 4.2 游戏结束消息JSON结构 + +```json +{ + "result": true, // 操作结果 + "errMsg": "", // 错误信息 + "statusCode": 0, // 状态码(0=成功,非0=失败) + "tag": "game-over", // 标识标签 + "data": { + "playerIndex": 1, // player索引 + "cardId": "123456", // 卡ID + "timestamp": 1634567890 // 时间戳 + } +} +``` + +### 4.3 游戏业务信息JSON结构 + +```json +{ + "result": true, // 操作结果 + "errMsg": "", // 错误信息 + "statusCode": 0, // 状态码(0=成功,非0=失败) + "tag": "game-data", // 标识标签 + "data": { + "playerIndex": 1, // player索引 + "cardId": "123456", // 卡ID + "gameData": { // 游戏数据(根据具体业务定义) + // 具体业务数据 + }, + "timestamp": 1634567890 // 时间戳 + } +} +``` + +## 5. 通信端口说明 + +- **12101端口**:游戏端监听,业务端发送消息 +- **12103端口**:业务端监听,游戏端发送消息 + +## 6. 数据持久化 + +### 6.1 SQLite数据结构 + +#### 用户信息表 +```sql +CREATE TABLE user_info ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + card_id TEXT NOT NULL, + card_sn TEXT NOT NULL, + user_name TEXT, + user_avatar TEXT, + last_updated INTEGER, + UNIQUE(card_id, card_sn) +); +``` + +#### 游戏数据表 +```sql +CREATE TABLE game_data ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + card_id TEXT NOT NULL, + player_index INTEGER NOT NULL, + data_type TEXT NOT NULL, + data_content TEXT NOT NULL, + timestamp INTEGER NOT NULL, + is_synced INTEGER DEFAULT 0 +); +``` + +### 6.2 文件存储结构 + +游戏数据文件命名格式:`game_data_{timestamp}_{playerIndex}_{cardId}.json` + +## 7. 注意事项 + +### 7.1 数据安全与隐私 + +- 用户卡信息应进行加密存储 +- 本地数据应设置访问权限限制 +- 网络传输过程采用HTTPS或加密通道 + +### 7.2 数据同步机制 + +- 本地数据与服务器数据定期同步机制 +- 冲突解决策略(以服务器数据为准或采用时间戳) +- 同步频率设置(定时/事件触发) + +### 7.3 错误处理与恢复 + +- 网络恢复后的数据自动上传机制 +- 重试策略(指数退避算法) +- 错误日志记录与报警机制 +- 异常情况下的回滚机制 + +### 7.4 性能优化 + +- SQLite查询优化 +- 批量数据处理 +- 队列机制避免并发问题 +- 异步处理大量数据 + +### 7.5 本地存储管理 + +- 定期清理过期数据 +- 存储空间监控 +- 数据备份机制 +- 存储空间不足时的处理策略 + +### 7.6 监控与日志 + +- 关键操作日志记录 +- 系统状态监控 +- 异常情况报警机制 + +## 8. 系统扩展性考虑 + +- 支持多种类型用户卡的可扩展接口 +- 业务消息类型的可扩展设计 +- 版本兼容性处理机制 +- 插件化架构设计 +- 配置化管理 \ No newline at end of file