新增服务器连接配置
This commit is contained in:
parent
1486e1f6ec
commit
e525e06d7a
@ -28,6 +28,9 @@ public class PrintServerConfig {
|
||||
private static final boolean DEFAULT_ENABLE_NOTIFICATIONS = true;
|
||||
private static final boolean DEFAULT_START_MINIMIZED = false;
|
||||
private static final boolean DEFAULT_AUTO_START = false;
|
||||
private static final String DEFAULT_WEBSOCKET_URL = "ws://127.0.0.1:8080/print-websocket";
|
||||
private static final String DEFAULT_PRINTER_ID = "123456";
|
||||
private static final String DEFAULT_API_KEY = "519883ab-3677-ce4b-59ba-7263870d0a26";
|
||||
|
||||
// 配置属性
|
||||
private String defaultPrinter = DEFAULT_PRINTER;
|
||||
@ -35,6 +38,9 @@ public class PrintServerConfig {
|
||||
private boolean enableNotifications = DEFAULT_ENABLE_NOTIFICATIONS;
|
||||
private boolean startMinimized = DEFAULT_START_MINIMIZED;
|
||||
private boolean autoStart = DEFAULT_AUTO_START;
|
||||
private String websocketUrl = DEFAULT_WEBSOCKET_URL;
|
||||
private String printerId = DEFAULT_PRINTER_ID;
|
||||
private String apiKey = DEFAULT_API_KEY;
|
||||
|
||||
private Properties properties = new Properties();
|
||||
private File configFile;
|
||||
@ -68,6 +74,9 @@ public class PrintServerConfig {
|
||||
enableNotifications = Boolean.parseBoolean(properties.getProperty("enableNotifications", String.valueOf(DEFAULT_ENABLE_NOTIFICATIONS)));
|
||||
startMinimized = Boolean.parseBoolean(properties.getProperty("startMinimized", String.valueOf(DEFAULT_START_MINIMIZED)));
|
||||
autoStart = Boolean.parseBoolean(properties.getProperty("autoStart", String.valueOf(DEFAULT_AUTO_START)));
|
||||
websocketUrl = properties.getProperty("websocketUrl", DEFAULT_WEBSOCKET_URL);
|
||||
printerId = properties.getProperty("printerId", DEFAULT_PRINTER_ID);
|
||||
apiKey = properties.getProperty("apiKey", DEFAULT_API_KEY);
|
||||
|
||||
log.info("配置已加载: {}", configFile.getAbsolutePath());
|
||||
} catch (IOException e) {
|
||||
@ -98,6 +107,9 @@ public class PrintServerConfig {
|
||||
properties.setProperty("enableNotifications", String.valueOf(enableNotifications));
|
||||
properties.setProperty("startMinimized", String.valueOf(startMinimized));
|
||||
properties.setProperty("autoStart", String.valueOf(autoStart));
|
||||
properties.setProperty("websocketUrl", websocketUrl);
|
||||
properties.setProperty("printerId", printerId);
|
||||
properties.setProperty("apiKey", apiKey);
|
||||
|
||||
// 保存到文件
|
||||
try (FileOutputStream fos = new FileOutputStream(configFile)) {
|
||||
@ -118,5 +130,8 @@ public class PrintServerConfig {
|
||||
enableNotifications = DEFAULT_ENABLE_NOTIFICATIONS;
|
||||
startMinimized = DEFAULT_START_MINIMIZED;
|
||||
autoStart = DEFAULT_AUTO_START;
|
||||
websocketUrl = DEFAULT_WEBSOCKET_URL;
|
||||
printerId = DEFAULT_PRINTER_ID;
|
||||
apiKey = DEFAULT_API_KEY;
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,7 @@ package com.goeing.printserver.main.gui;
|
||||
|
||||
import com.goeing.printserver.main.PrintController;
|
||||
import com.goeing.printserver.main.config.PrintServerConfig;
|
||||
import com.goeing.printserver.main.sse.PrinterClient;
|
||||
import com.goeing.printserver.main.utils.LocaleChangeListener;
|
||||
import com.goeing.printserver.main.utils.LocaleManager;
|
||||
import com.goeing.printserver.main.utils.MessageUtils;
|
||||
@ -28,6 +29,7 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
private final PrintQueueService printQueueService;
|
||||
private final PrintServerConfig config;
|
||||
private final PrintController printController;
|
||||
private final PrinterClient printerClient;
|
||||
|
||||
// UI组件
|
||||
private JComboBox<String> defaultPrinterComboBox;
|
||||
@ -35,19 +37,26 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
private JCheckBox enableNotificationsCheckBox;
|
||||
private JCheckBox startMinimizedCheckBox;
|
||||
private JCheckBox autoStartCheckBox;
|
||||
private JTextField websocketUrlField;
|
||||
private JTextField printerIdField;
|
||||
private JTextField apiKeyField;
|
||||
|
||||
// 标签和按钮
|
||||
private JLabel titleLabel;
|
||||
private JLabel defaultPrinterLabel;
|
||||
private JLabel maxQueueSizeLabel;
|
||||
private JLabel websocketUrlLabel;
|
||||
private JLabel printerIdLabel;
|
||||
private JLabel apiKeyLabel;
|
||||
private JButton saveButton;
|
||||
private JButton resetButton;
|
||||
|
||||
@Autowired
|
||||
public PrintSettingsPanel(PrintQueueService printQueueService, PrintServerConfig config, PrintController printController) {
|
||||
public PrintSettingsPanel(PrintQueueService printQueueService, PrintServerConfig config, PrintController printController, PrinterClient printerClient) {
|
||||
this.printQueueService = printQueueService;
|
||||
this.config = config;
|
||||
this.printController = printController;
|
||||
this.printerClient = printerClient;
|
||||
initializeUI();
|
||||
loadSettings();
|
||||
|
||||
@ -121,9 +130,47 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
autoStartCheckBox = new JCheckBox(MessageUtils.getMessage("settings.autoStart"));
|
||||
settingsPanel.add(autoStartCheckBox, gbc);
|
||||
|
||||
// 添加一个弹性空间
|
||||
// WebSocket URL设置
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 5;
|
||||
gbc.gridwidth = 1;
|
||||
gbc.weightx = 0.0;
|
||||
websocketUrlLabel = new JLabel(MessageUtils.getMessage("settings.websocketUrl"));
|
||||
settingsPanel.add(websocketUrlLabel, gbc);
|
||||
|
||||
gbc.gridx = 1;
|
||||
gbc.weightx = 1.0;
|
||||
websocketUrlField = new JTextField();
|
||||
settingsPanel.add(websocketUrlField, gbc);
|
||||
|
||||
// 打印机ID设置
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 6;
|
||||
gbc.weightx = 0.0;
|
||||
printerIdLabel = new JLabel(MessageUtils.getMessage("settings.printerId"));
|
||||
settingsPanel.add(printerIdLabel, gbc);
|
||||
|
||||
gbc.gridx = 1;
|
||||
gbc.weightx = 1.0;
|
||||
printerIdField = new JTextField();
|
||||
settingsPanel.add(printerIdField, gbc);
|
||||
|
||||
// API Key设置
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 7;
|
||||
gbc.weightx = 0.0;
|
||||
apiKeyLabel = new JLabel(MessageUtils.getMessage("settings.apiKey"));
|
||||
settingsPanel.add(apiKeyLabel, gbc);
|
||||
|
||||
gbc.gridx = 1;
|
||||
gbc.weightx = 1.0;
|
||||
apiKeyField = new JTextField();
|
||||
settingsPanel.add(apiKeyField, gbc);
|
||||
|
||||
// 添加一个弹性空间
|
||||
gbc.gridx = 0;
|
||||
gbc.gridy = 8;
|
||||
gbc.gridwidth = 2;
|
||||
gbc.weighty = 1.0;
|
||||
settingsPanel.add(Box.createVerticalGlue(), gbc);
|
||||
|
||||
@ -158,6 +205,9 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
enableNotificationsCheckBox.setSelected(config.isEnableNotifications());
|
||||
startMinimizedCheckBox.setSelected(config.isStartMinimized());
|
||||
autoStartCheckBox.setSelected(config.isAutoStart());
|
||||
websocketUrlField.setText(config.getWebsocketUrl());
|
||||
printerIdField.setText(config.getPrinterId());
|
||||
apiKeyField.setText(config.getApiKey());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -171,6 +221,14 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
boolean enableNotifications = enableNotificationsCheckBox.isSelected();
|
||||
boolean startMinimized = startMinimizedCheckBox.isSelected();
|
||||
boolean autoStart = autoStartCheckBox.isSelected();
|
||||
String websocketUrl = websocketUrlField.getText().trim();
|
||||
String printerId = printerIdField.getText().trim();
|
||||
String apiKey = apiKeyField.getText().trim();
|
||||
|
||||
// 检查WebSocket相关配置是否发生变化
|
||||
boolean websocketConfigChanged = !websocketUrl.equals(config.getWebsocketUrl()) ||
|
||||
!printerId.equals(config.getPrinterId()) ||
|
||||
!apiKey.equals(config.getApiKey());
|
||||
|
||||
// 更新配置对象
|
||||
config.setDefaultPrinter(defaultPrinter);
|
||||
@ -178,6 +236,9 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
config.setEnableNotifications(enableNotifications);
|
||||
config.setStartMinimized(startMinimized);
|
||||
config.setAutoStart(autoStart);
|
||||
config.setWebsocketUrl(websocketUrl);
|
||||
config.setPrinterId(printerId);
|
||||
config.setApiKey(apiKey);
|
||||
|
||||
// 保存配置
|
||||
config.saveConfig();
|
||||
@ -185,7 +246,15 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
// 应用设置到服务
|
||||
applySettings();
|
||||
|
||||
JOptionPane.showMessageDialog(this, MessageUtils.getMessage("settings.saved"), MessageUtils.getMessage("dialog.success"), JOptionPane.INFORMATION_MESSAGE);
|
||||
// 如果WebSocket配置发生变化,重新连接WebSocket
|
||||
if (websocketConfigChanged) {
|
||||
printerClient.reconnect();
|
||||
String message = MessageUtils.getMessage("settings.saved") + "\n\n" +
|
||||
MessageUtils.getMessage("settings.websocket.reconnected");
|
||||
JOptionPane.showMessageDialog(this, message, MessageUtils.getMessage("dialog.success"), JOptionPane.INFORMATION_MESSAGE);
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(this, MessageUtils.getMessage("settings.saved"), MessageUtils.getMessage("dialog.success"), JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(MessageUtils.getMessage("log.settings.save.error"), e);
|
||||
JOptionPane.showMessageDialog(this, MessageUtils.getMessage("settings.save.error", new Object[]{e.getMessage()}), MessageUtils.getMessage("dialog.error"), JOptionPane.ERROR_MESSAGE);
|
||||
@ -346,6 +415,9 @@ public class PrintSettingsPanel extends JPanel implements LocaleChangeListener {
|
||||
titleLabel.setText(MessageUtils.getMessage("settings.title"));
|
||||
defaultPrinterLabel.setText(MessageUtils.getMessage("settings.defaultPrinter"));
|
||||
maxQueueSizeLabel.setText(MessageUtils.getMessage("settings.maxQueueSize"));
|
||||
websocketUrlLabel.setText(MessageUtils.getMessage("settings.websocketUrl"));
|
||||
printerIdLabel.setText(MessageUtils.getMessage("settings.printerId"));
|
||||
apiKeyLabel.setText(MessageUtils.getMessage("settings.apiKey"));
|
||||
|
||||
// 更新复选框
|
||||
enableNotificationsCheckBox.setText(MessageUtils.getMessage("settings.notifications"));
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.goeing.printserver.main.PrintController;
|
||||
import com.goeing.printserver.main.config.PrintServerConfig;
|
||||
import com.goeing.printserver.main.domain.dto.WebSocketMessageDTO;
|
||||
import com.goeing.printserver.main.domain.request.PrintRequest;
|
||||
import com.goeing.printserver.main.service.PrintQueueService;
|
||||
@ -30,21 +31,17 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
public class PrinterClient implements ApplicationRunner {
|
||||
private final PrintQueueService printQueueService;
|
||||
private final PrintServerConfig config;
|
||||
private Session session;
|
||||
@Value("${print.printer.id}")
|
||||
private String printerId;
|
||||
@Value("${print.websocket.url}")
|
||||
private String serverUri;
|
||||
@Value("${print.websocket.apiKey}")
|
||||
private String apiKey;
|
||||
|
||||
private final ScheduledExecutorService reconnectExecutor = Executors.newSingleThreadScheduledExecutor();
|
||||
private final ScheduledExecutorService heartbeatExecutor = Executors.newSingleThreadScheduledExecutor();
|
||||
private boolean isConnecting = false;
|
||||
|
||||
// 构造函数,注入PrintQueueService
|
||||
public PrinterClient(PrintQueueService printQueueService) {
|
||||
// 构造函数,注入PrintQueueService和PrintServerConfig
|
||||
public PrinterClient(PrintQueueService printQueueService, PrintServerConfig config) {
|
||||
this.printQueueService = printQueueService;
|
||||
this.config = config;
|
||||
// 构造函数不做连接操作,在run方法中进行连接
|
||||
}
|
||||
|
||||
@ -150,6 +147,12 @@ public class PrinterClient implements ApplicationRunner {
|
||||
if (isConnecting || (session != null && session.isOpen())) {
|
||||
return; // 已经连接或正在连接中
|
||||
}
|
||||
|
||||
// 从配置对象中获取最新的连接参数
|
||||
String serverUri = config.getWebsocketUrl();
|
||||
String printerId = config.getPrinterId();
|
||||
String apiKey = config.getApiKey();
|
||||
|
||||
String tempUrl = serverUri+"?printerId="+printerId+"&apiKey="+apiKey;
|
||||
|
||||
isConnecting = true;
|
||||
@ -212,6 +215,23 @@ public class PrinterClient implements ApplicationRunner {
|
||||
log.info("WebSocket客户端已关闭");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新连接WebSocket服务器(用于配置更改后)
|
||||
*/
|
||||
public void reconnect() {
|
||||
log.info("配置已更改,重新连接WebSocket服务器...");
|
||||
if (session != null && session.isOpen()) {
|
||||
try {
|
||||
session.close();
|
||||
} catch (Exception e) {
|
||||
log.error("关闭现有连接失败", e);
|
||||
}
|
||||
}
|
||||
session = null;
|
||||
isConnecting = false;
|
||||
connect();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
// 应用启动后连接到WebSocket服务器
|
||||
|
||||
@ -103,6 +103,9 @@ settings.maxQueueSize=Max Queue Size:
|
||||
settings.notifications=Enable System Notifications
|
||||
settings.startMinimized=Start Minimized to System Tray
|
||||
settings.autoStart=Start Automatically at Login
|
||||
settings.websocketUrl=WebSocket URL:
|
||||
settings.printerId=Printer ID:
|
||||
settings.apiKey=API Key:
|
||||
settings.save=Save Settings
|
||||
settings.reset=Reset to Defaults
|
||||
settings.saved=Settings have been saved
|
||||
|
||||
@ -103,9 +103,13 @@ settings.maxQueueSize=Max Queue Size:
|
||||
settings.notifications=Enable System Notifications
|
||||
settings.startMinimized=Start Minimized to System Tray
|
||||
settings.autoStart=Start Automatically at Login
|
||||
settings.websocketUrl=WebSocket URL:
|
||||
settings.printerId=Printer ID:
|
||||
settings.apiKey=API Key:
|
||||
settings.save=Save Settings
|
||||
settings.reset=Reset to Defaults
|
||||
settings.saved=Settings have been saved
|
||||
settings.websocket.reconnected=WebSocket configuration has been changed and the connection has been automatically reconnected.
|
||||
settings.reset.confirm=Are you sure you want to reset all settings to default values?
|
||||
settings.reset.success=Settings have been reset to default values
|
||||
settings.save.error=Failed to save settings: {0}
|
||||
|
||||
@ -101,9 +101,13 @@ settings.maxQueueSize=最大队列大小:
|
||||
settings.notifications=启用系统通知
|
||||
settings.startMinimized=启动时最小化到系统托盘
|
||||
settings.autoStart=开机自动启动
|
||||
settings.websocketUrl=WebSocket地址:
|
||||
settings.printerId=打印机ID:
|
||||
settings.apiKey=API密钥:
|
||||
settings.save=保存设置
|
||||
settings.reset=重置默认
|
||||
settings.saved=设置已保存
|
||||
settings.websocket.reconnected=WebSocket配置已更改,连接已自动重新建立。
|
||||
settings.reset.confirm=确定要重置所有设置为默认值吗?
|
||||
settings.reset.success=设置已重置为默认值
|
||||
settings.save.error=保存设置失败: {0}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user