# ScriptClient HTTP交互统一管理总结 ## 🎯 目标 将所有与 `http://36.138.184.60:12345/%s/` 交互的代码统一整合到 `ScriptClient` 类中,避免散落在各个部分。 ## 📋 问题分析 ### **整合前的问题** 通过代码扫描发现以下问题: 1. **硬编码URL散落各处**: - `LinkStatusService.java:603` - 直接构建资源基础URL - `ScriptClient.java:200` - `getQrCodeUrl` 方法中硬编码URL - 多个文档和示例中存在硬编码URL引用 2. **URL管理不统一**: - 各个服务类自己拼接URL - 缺乏统一的URL构建方法 - 配置文件中的 `script.base-url` 没有被充分利用 3. **维护困难**: - 当脚本服务器地址变更时,需要修改多个文件 - URL格式不一致,容易出错 ## ✅ 解决方案 ### **1. ScriptClient 统一URL管理** 在 `ScriptClient` 类中添加了以下统一管理方法: #### **基础URL管理** ```java /** * 获取资源基础URL - 统一管理所有资源链接 * @param deviceId 设备编号 * @return 资源基础URL,如 http://36.138.184.60:12345/f1/ */ public String getAssetsBaseUrl(String deviceId) { return String.format("%s/%s/", baseUrl, deviceId); } ``` #### **特定资源URL** ```java /** * 获取特定资源的完整URL * @param deviceId 设备编号 * @param resourceName 资源名称,如 "首次主页.png" * @return 完整的资源URL */ public String getResourceUrl(String deviceId, String resourceName) { return String.format("%s/%s/%s", baseUrl, deviceId, resourceName); } ``` #### **游戏图片URL映射** ```java /** * 获取各种游戏图片的URL映射 - 统一管理所有游戏相关图片链接 * @param deviceId 设备编号 * @return 包含所有图片URL的映射 */ public java.util.Map getGameImageUrls(String deviceId) { java.util.Map imageUrls = new java.util.HashMap<>(); String baseUrl = getAssetsBaseUrl(deviceId); imageUrls.put("qrCode", baseUrl + "二维码.png"); imageUrls.put("homepage", baseUrl + "首次主页.png"); imageUrls.put("firstReward", baseUrl + "首次赏金.png"); imageUrls.put("midReward", baseUrl + "中途赏金.png"); imageUrls.put("endReward", baseUrl + "结束赏金.png"); return imageUrls; } ``` #### **二维码URL(优化)** ```java /** * 获取二维码URL(带时间戳防缓存)- 直接链接到脚本服务器 */ public String getQrCodeUrl(String codeNo) { long timestamp = System.currentTimeMillis(); return String.format("%s/%s/二维码.png?t=%d", baseUrl, codeNo, timestamp); } ``` ### **2. 服务类调用方式更新** #### **LinkStatusService 优化** **优化前**: ```java // 硬编码URL构建 PollLoginResponse response = new PollLoginResponse(true, "LOGGED_IN", "SECOND", new PollLoginResponse.AssetsInfo( String.format("http://36.138.184.60:12345/%s/", realDeviceId) )); ``` **优化后**: ```java // 使用ScriptClient统一管理 PollLoginResponse response = new PollLoginResponse(true, "LOGGED_IN", "SECOND", new PollLoginResponse.AssetsInfo( scriptClient.getAssetsBaseUrl(realDeviceId) )); ``` ### **3. 配置文件管理** 所有URL都基于配置文件中的基础URL: ```yaml # 外部脚本端配置 script: base-url: "http://36.138.184.60:12345" connect-timeout-ms: 3000 read-timeout-ms: 5000 ``` ## 🧪 功能验证 创建了完整的测试套件验证所有URL管理功能: ```java @Test void testGetAssetsBaseUrl() { String baseUrl = scriptClient.getAssetsBaseUrl("f1"); assertEquals("http://36.138.184.60:12345/f1/", baseUrl); } @Test void testGetGameImageUrls() { Map imageUrls = scriptClient.getGameImageUrls("f1"); assertEquals("http://36.138.184.60:12345/f1/二维码.png", imageUrls.get("qrCode")); assertEquals("http://36.138.184.60:12345/f1/首次主页.png", imageUrls.get("homepage")); // ... 更多验证 } ``` **测试结果**: ✅ 所有测试通过 (6/6) ## 📊 优化效果 ### **1. 集中化管理** - ✅ 所有与 `http://36.138.184.60:12345/%s/` 相关的交互都在 `ScriptClient` 中 - ✅ 统一的URL构建方法,避免重复代码 - ✅ 基于配置文件的URL管理 ### **2. 维护性提升** - 🔧 **配置变更**: 只需修改 `application.yml` 中的 `script.base-url` - 🔧 **URL格式调整**: 只需修改 `ScriptClient` 中的方法 - 🔧 **新增资源**: 在 `ScriptClient` 中添加新的URL构建方法 ### **3. 代码一致性** - 📝 所有URL构建逻辑统一 - 📝 减少硬编码,提高代码质量 - 📝 更好的可读性和可维护性 ### **4. 现有功能保持** - ✅ 所有现有的HTTP调用功能完全保持 - ✅ 性能无影响 - ✅ 向后兼容 ## 🚀 使用示例 ### **获取资源基础URL** ```java // 获取设备f1的资源基础URL String assetsUrl = scriptClient.getAssetsBaseUrl("f1"); // 返回: http://36.138.184.60:12345/f1/ ``` ### **获取特定资源URL** ```java // 获取首次主页图片URL String homepageUrl = scriptClient.getResourceUrl("f1", "首次主页.png"); // 返回: http://36.138.184.60:12345/f1/首次主页.png ``` ### **获取所有游戏图片URL** ```java // 获取所有游戏相关图片URL Map gameUrls = scriptClient.getGameImageUrls("f1"); // 返回包含qrCode、homepage、firstReward、midReward、endReward的映射 ``` ### **获取二维码URL(带时间戳)** ```java // 获取防缓存的二维码URL String qrUrl = scriptClient.getQrCodeUrl("ABC123"); // 返回: http://36.138.184.60:12345/ABC123/二维码.png?t=1693123456789 ``` ## 🎉 总结 通过这次整合: 1. **✅ 统一管理**: 所有HTTP交互都通过 `ScriptClient` 统一管理 2. **✅ 配置驱动**: 基于配置文件的URL管理,易于维护 3. **✅ 代码整洁**: 消除硬编码,提高代码质量 4. **✅ 功能完整**: 提供了完整的URL构建方法套件 5. **✅ 测试验证**: 通过完整测试确保功能正确 现在系统中所有与脚本服务器的HTTP交互都集中在 `ScriptClient` 中,实现了统一管理的目标!🎯