diff --git a/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/config/LedProperties.java b/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/config/LedProperties.java index 23e5c664..323726e7 100644 --- a/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/config/LedProperties.java +++ b/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/config/LedProperties.java @@ -15,6 +15,7 @@ public class LedProperties { private int connectionTimeout = 5000; // 连接超时时间,单位毫秒 private int responseTimeout = 10000; // 响应超时时间,单位毫秒 private int envTimeout = 30000; // Bx6G环境初始化超时时间,单位毫秒 + private int drawRetryCount = 3; // LED绘制重试次数 private String savePath = "/Users/haha/code/leddata/"; // LED图片保存路径 // Getters and Setters @@ -90,6 +91,14 @@ public class LedProperties { this.savePath = savePath; } + public int getDrawRetryCount() { + return drawRetryCount; + } + + public void setDrawRetryCount(int drawRetryCount) { + this.drawRetryCount = drawRetryCount; + } + /** * 构建针对特定设备的保存路径 */ diff --git a/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedDrawService.java b/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedDrawService.java index a6fb949a..945348de 100644 --- a/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedDrawService.java +++ b/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedDrawService.java @@ -50,25 +50,53 @@ public class LedDrawService { * 根据控制器类型绘制LED屏内容 */ public boolean drawLedScreenContent(SysLedscreen ledScreen) { - try { - // 获取对应的屏幕对象 - Bx6GScreen screen = connectedScreens.get(ledScreen.getDeviceSn()); - if (screen == null) { - logger.error("屏幕未连接: {}", ledScreen.getDeviceSn()); - return false; + int maxRetries = ledProperties.getDrawRetryCount(); + int retryCount = 0; + Exception lastException = null; + + while (retryCount <= maxRetries) { + try { + if (retryCount > 0) { + logger.info("LED屏绘制重试 {}/{}: {}", retryCount, maxRetries, ledScreen.getDeviceSn()); + } + + // 获取对应的屏幕对象 + Bx6GScreen screen = connectedScreens.get(ledScreen.getDeviceSn()); + if (screen == null) { + logger.error("屏幕未连接: {}", ledScreen.getDeviceSn()); + return false; + } + + // 根据控制器类型创建节目文件,使用屏幕的配置文件 + ProgramBxFile programFile = createProgramByControllerType(ledScreen, screen); + + // 发送节目到LED屏 + screen.changeOutputBuffer(512); + screen.writeProgram(programFile); + logger.info("成功发送节目到LED屏: {}", ledScreen.getDeviceSn()); + + return true; + } catch (Exception e) { + lastException = e; + retryCount++; + + if (retryCount <= maxRetries) { + logger.warn("绘制LED屏内容时出错 (尝试 {}/{}): {} - {}", + retryCount, maxRetries, ledScreen.getDeviceSn(), e.getMessage()); + + try { + Thread.sleep(1000); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + logger.error("重试延迟被中断", ie); + return false; + } + } } - // 根据控制器类型创建节目文件,使用屏幕的配置文件 - ProgramBxFile programFile = createProgramByControllerType(ledScreen, screen); - - // 发送节目到LED屏 - screen.writeProgram(programFile); - logger.info("成功发送节目到LED屏: {}", ledScreen.getDeviceSn()); - - return true; - } catch (Exception e) { - logger.error("绘制LED屏内容时出错: {}", e.getMessage(), e); - return false; } + + logger.error("LED屏绘制失败,已达到最大重试次数 {}: {}", maxRetries, ledScreen.getDeviceSn(), lastException); + return false; } /** diff --git a/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedServerService.java b/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedServerService.java index b101d7e2..322b3e85 100644 --- a/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedServerService.java +++ b/yanzhu-modules/yanzhu-led/src/main/java/com/yanzhu/led/service/LedServerService.java @@ -40,7 +40,7 @@ public class LedServerService { // 初始化Bx6G环境 ledDrawService.initializeBx6GEnv(); - // 尝试创建服务器实例,使用Bx6E系列控制器 + // 尝试创建服务器实例,使用Bx6M系列控制器 server = createServerWithAvailablePort(); if (server != null) { @@ -68,7 +68,7 @@ public class LedServerService { */ private Bx6GServer createServerWithAvailablePort() { try { - Bx6GServer tempServer = new Bx6GServer("LED_Server", PORT, new Bx6E()); + Bx6GServer tempServer = new Bx6GServer("LED_Server", PORT, new Bx6M()); logger.info("成功创建LED服务器,使用端口: {}", PORT); return tempServer; } catch (Exception e) {