Merge remote-tracking branch 'origin/dev_xd' into dev_xd
commit
0790d48df2
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建针对特定设备的保存路径
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue