diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..c2bae49 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/cn/reddragon/eportal/EPortal.java b/src/main/java/cn/reddragon/eportal/EPortal.java index 8c00610..461f189 100644 --- a/src/main/java/cn/reddragon/eportal/EPortal.java +++ b/src/main/java/cn/reddragon/eportal/EPortal.java @@ -2,6 +2,7 @@ import cn.reddragon.eportal.account.AccountManager; import cn.reddragon.eportal.config.ConfigManager; +import cn.reddragon.eportal.config.configs.AutoReconnectConfig; import cn.reddragon.eportal.controllers.MainController; import cn.reddragon.eportal.utils.Authenticator; import cn.reddragon.eportal.utils.LoginType; @@ -13,17 +14,22 @@ import javafx.scene.control.ChoiceBox; import javafx.scene.control.TextField; import javafx.stage.Stage; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.IOException; import java.util.Objects; public class EPortal extends Application { public static MainController controller; + public static Logger logger = LogManager.getLogger("EPortal"); public static final Thread askThread = new Thread(() -> { while (true) { try { //System.out.println("Heartbeat."); Authenticator.updateStatus(); + if (!Authenticator.online && AutoReconnectConfig.getAutoReconnect() && !Authenticator.error) + controller.onLoginButtonClick(); Platform.runLater(controller::updateUI); if (Authenticator.error) Thread.sleep(1000L); @@ -31,35 +37,14 @@ public class EPortal extends Application { Thread.sleep(5000L); } catch (Exception e) { //throw new RuntimeException(e); - e.printStackTrace(); + logger.error("监听线程出错!", e); } } }); - public static void main(String[] args) { - askThread.setDaemon(true); - Authenticator.checkOnline(); - try { - if (Authenticator.online) { - System.out.println("Already connected!"); - Authenticator.updateUserIndex(); - //System.exit(0); - } else { - System.out.println("Ready"); - } - //System.out.println(result); - } catch (NullPointerException e) { - e.printStackTrace(); - System.exit(0); - } - launch(); - ConfigManager.saveConfigs(); - } - @SuppressWarnings("unchecked") @Override public void start(Stage stage) throws IOException { - Thread.currentThread().setName("EPortal Main"); FXMLLoader fxmlLoader = new FXMLLoader(EPortal.class.getResource("hello-view.fxml")); Parent root = fxmlLoader.load(); controller = fxmlLoader.getController(); @@ -79,19 +64,11 @@ public void start(Stage stage) throws IOException { ConfigManager.loadConfigs(); TextField name = (TextField) root.lookup("#userNameField"); TextField pass = (TextField) root.lookup("#passwordField"); - //name.setText(config[0]); - //pass.setText(config[1]); if (!AccountManager.accounts.isEmpty()) { name.setText(AccountManager.accounts.get(0).getName()); pass.setText(AccountManager.accounts.get(0).getPassword()); } - //box.setValue(box.getItems().get(Byte.parseByte(config[2]))); - //updateUI(); askThread.start(); - Authenticator.checkOnline(); - if (!Authenticator.online) { - controller.onLoginButtonClick(); - } stage.show(); } } \ No newline at end of file diff --git a/src/main/java/cn/reddragon/eportal/Main.java b/src/main/java/cn/reddragon/eportal/Main.java index 52abcde..faa731e 100644 --- a/src/main/java/cn/reddragon/eportal/Main.java +++ b/src/main/java/cn/reddragon/eportal/Main.java @@ -1,7 +1,22 @@ package cn.reddragon.eportal; +import cn.reddragon.eportal.config.ConfigManager; +import cn.reddragon.eportal.utils.Authenticator; + public class Main { public static void main(String[] args) { - EPortal.main(args); + Thread.currentThread().setName("EPortal Main"); + EPortal.askThread.setDaemon(true); + Authenticator.checkOnline(); + try { + if (Authenticator.online) { + Authenticator.updateUserIndex(); + } + } catch (NullPointerException e) { + EPortal.logger.error("启动时出错!", e); + System.exit(0); + } + EPortal.launch(); + ConfigManager.saveConfigs(); } } diff --git a/src/main/java/cn/reddragon/eportal/config/ConfigManager.java b/src/main/java/cn/reddragon/eportal/config/ConfigManager.java index f38fbb6..810ddb1 100644 --- a/src/main/java/cn/reddragon/eportal/config/ConfigManager.java +++ b/src/main/java/cn/reddragon/eportal/config/ConfigManager.java @@ -1,6 +1,7 @@ package cn.reddragon.eportal.config; import cn.reddragon.eportal.config.configs.AccountConfig; +import cn.reddragon.eportal.config.configs.AutoReconnectConfig; import cn.reddragon.eportal.config.configs.NetTypeConfig; import com.google.gson.*; import org.apache.logging.log4j.LogManager; @@ -15,6 +16,7 @@ public class ConfigManager { private static final File configFile = new File("EPortal.json"); private static final ArrayList configs = new ArrayList<>(); private static final Logger logger = LogManager.getLogger("ConfigManager"); + private static final int configVersion = 1; static { if (!configFile.exists()) { @@ -28,6 +30,7 @@ public class ConfigManager { } configs.add(new AccountConfig()); configs.add(new NetTypeConfig()); + configs.add(new AutoReconnectConfig()); } public static void loadConfigs() { @@ -36,14 +39,19 @@ public static void loadConfigs() { if (!element.isJsonNull()) { JsonObject object = element.getAsJsonObject(); for (Entry next : object.entrySet()) { + if (next.getKey().equals("ConfigVersion")) { + // TODO + } for (AbstractConfig config : configs) { if (config.name.equals(next.getKey())) { config.fromJson(next.getValue()); - logger.info("成功加载配置文件 {}", config.name); + logger.info("成功加载配置文件 {}.", config.name); break; } } } + } else { + logger.warn("配置文件损坏!"); } } catch (FileNotFoundException e) { throw new RuntimeException(e); @@ -52,9 +60,10 @@ public static void loadConfigs() { public static void saveConfigs() { JsonObject root = new JsonObject(); + root.addProperty("ConfigVersion", configVersion); for (AbstractConfig config : configs) { root.add(config.name, config.toJson()); - logger.info("成功保存配置文件 {}", config.name); + logger.info("成功保存配置文件 {}.", config.name); } try { BufferedWriter writer = new BufferedWriter(new FileWriter(configFile)); diff --git a/src/main/java/cn/reddragon/eportal/config/configs/AutoReconnectConfig.java b/src/main/java/cn/reddragon/eportal/config/configs/AutoReconnectConfig.java new file mode 100644 index 0000000..2d54002 --- /dev/null +++ b/src/main/java/cn/reddragon/eportal/config/configs/AutoReconnectConfig.java @@ -0,0 +1,27 @@ +package cn.reddragon.eportal.config.configs; + +import cn.reddragon.eportal.EPortal; +import cn.reddragon.eportal.config.AbstractConfig; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import javafx.scene.control.CheckMenuItem; + +public class AutoReconnectConfig extends AbstractConfig { + public AutoReconnectConfig() { + super("AutoReconnect"); + } + + public static boolean getAutoReconnect() { + return ((CheckMenuItem) EPortal.controller.menuBar.getMenus().get(0).getItems().get(0)).isSelected(); + } + + @Override + public JsonElement toJson() { + return new JsonPrimitive(getAutoReconnect()); + } + + @Override + public void fromJson(JsonElement element) { + ((CheckMenuItem) EPortal.controller.menuBar.getMenus().get(0).getItems().get(0)).setSelected(element.getAsBoolean()); + } +} diff --git a/src/main/java/cn/reddragon/eportal/config/configs/NetTypeConfig.java b/src/main/java/cn/reddragon/eportal/config/configs/NetTypeConfig.java index b5533b6..a26ca97 100644 --- a/src/main/java/cn/reddragon/eportal/config/configs/NetTypeConfig.java +++ b/src/main/java/cn/reddragon/eportal/config/configs/NetTypeConfig.java @@ -20,6 +20,9 @@ public JsonElement toJson() { @Override public void fromJson(JsonElement element) { - selector.setValue(selector.getItems().get(element.getAsInt())); + if (element.getAsInt() != -1) + selector.setValue(selector.getItems().get(element.getAsInt())); + else + selector.setValue(""); } } diff --git a/src/main/java/cn/reddragon/eportal/controllers/MainController.java b/src/main/java/cn/reddragon/eportal/controllers/MainController.java index 799cfd5..fcd8033 100644 --- a/src/main/java/cn/reddragon/eportal/controllers/MainController.java +++ b/src/main/java/cn/reddragon/eportal/controllers/MainController.java @@ -1,15 +1,13 @@ package cn.reddragon.eportal.controllers; +import cn.reddragon.eportal.EPortal; import cn.reddragon.eportal.account.AccountManager; import cn.reddragon.eportal.utils.*; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import javafx.application.Platform; import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.ChoiceBox; -import javafx.scene.control.Label; -import javafx.scene.control.TextField; +import javafx.scene.control.*; import java.io.IOException; import java.io.InputStreamReader; @@ -36,6 +34,8 @@ public class MainController { private TextField userNameField; @FXML private TextField passwordField; + @FXML + public MenuBar menuBar; public void updateUI() { StringBuilder sb = new StringBuilder(); @@ -90,6 +90,7 @@ public void onLoginButtonClick() { new Thread(() -> { HttpURLConnection connection = null; try { + EPortal.logger.info("尝试发出登出命令."); connection = Authenticator.logout(); if (connection == null) { Platform.runLater(() -> { @@ -99,12 +100,13 @@ public void onLoginButtonClick() { return; } JsonObject resultMessage = JsonParser.parseString(IOUtils.readText(connection.getInputStream())).getAsJsonObject(); - System.out.println(resultMessage.toString()); + //System.out.println(resultMessage.toString()); + EPortal.logger.info("服务器返回的是: {}", resultMessage); Platform.runLater(() -> resultText.setText(resultMessage.get("result").getAsString() + ":" + resultMessage.get("message").getAsString())); Authenticator.updateStatus(); Platform.runLater(this::updateUI); } catch (Exception e) { - e.printStackTrace(); + EPortal.logger.error("登出线程出错!", e); Platform.runLater(() -> resultText.setText(e.getMessage())); } finally { if (connection != null) { @@ -134,6 +136,7 @@ public void onLoginButtonClick() { String serviceString = Arrays.stream(LoginType.values()).filter(it -> Objects.equals(it.displayName, mode)).findFirst().map(it -> URIEncoder.encodeURI(URIEncoder.encodeURI(it.authName))).orElse(""); new Thread(() -> { try { + EPortal.logger.info("尝试发出登录命令."); //获取queryString HttpURLConnection connection = HttpUtils.make("http://123.123.123.123", "GET"); connection.setInstanceFollowRedirects(false); @@ -164,7 +167,8 @@ public void onLoginButtonClick() { } //获取结果 JsonObject resultMessage = JsonParser.parseString(IOUtils.readText(loginConnection.getInputStream())).getAsJsonObject(); - System.out.println(resultMessage.toString()); + //System.out.println(resultMessage.toString()); + EPortal.logger.info("服务器返回的是: {}", resultMessage); String result = resultMessage.get("result").getAsString(); Platform.runLater(() -> resultText.setText(resultMessage.get("result").getAsString() + ":" + resultMessage.get("message").getAsString())); if (result.equals("success")) { @@ -174,7 +178,7 @@ public void onLoginButtonClick() { AccountManager.addAccount(username, password); } } catch (IOException e) { - e.printStackTrace(); + EPortal.logger.error("登录线程出错!", e); Platform.runLater(() -> resultText.setText(e.getMessage())); } Authenticator.updateStatus(); diff --git a/src/main/java/cn/reddragon/eportal/utils/Authenticator.java b/src/main/java/cn/reddragon/eportal/utils/Authenticator.java index 8540be0..ffbb83c 100644 --- a/src/main/java/cn/reddragon/eportal/utils/Authenticator.java +++ b/src/main/java/cn/reddragon/eportal/utils/Authenticator.java @@ -5,6 +5,8 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import javafx.application.Platform; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.IOException; import java.io.PrintWriter; @@ -18,6 +20,7 @@ public class Authenticator { public static final String ePortalUrl = "http://10.96.0.155/eportal"; public static final String ePortalInterFaceUrl = ePortalUrl + "/InterFace.do?method="; + private static final Logger logger = LogManager.getLogger("Authenticator"); public static String userIndex = null; public static boolean online = false; public static LoginType type = null; @@ -34,7 +37,7 @@ public static HttpURLConnection login(String username, String password, String s connection.connect(); return connection; } catch (IOException e) { - e.printStackTrace(); + logger.error("登录时出错!", e); return null; } } @@ -51,7 +54,7 @@ public static void updateUserIndex() { String redirectLocation = result.get("Location").get(0); userIndex = redirectLocation.substring(redirectLocation.indexOf('=') + 1); } catch (IOException e) { - e.printStackTrace(); + logger.error("更新 UserIndex 时出错!", e); userIndex = null; } } @@ -67,7 +70,7 @@ public static HttpURLConnection getUserInfo() { connection.connect(); return connection; } catch (IOException e) { - e.printStackTrace(); + logger.error("更新用户数据时出错!", e); return null; } } @@ -120,21 +123,21 @@ public static void checkOnline() { error = false; } } catch (SocketTimeoutException e) { - System.err.println(e.getMessage()); + logger.error("无法连接到认证服务器! {}", e.getMessage()); if (EPortal.controller != null) { Platform.runLater(() -> EPortal.controller.resultText.setText("错误: 无法连接到认证服务器!")); error = true; } online = false; } catch (SocketException e) { - System.err.println(e.getMessage()); + logger.error("客户端网络错误! {}", e.getMessage()); if (EPortal.controller != null) { Platform.runLater(() -> EPortal.controller.resultText.setText("错误: 无网络连接!")); error = true; } online = false; } catch (IOException | NullPointerException e) { - e.printStackTrace(); + logger.error("更新在线状态时出错!", e); online = false; } } @@ -164,7 +167,7 @@ public static void updateSession() { } } } catch (Exception e) { - e.printStackTrace(); + logger.error("更新 Session 时出错!", e); } }).start(); } diff --git a/src/main/java/cn/reddragon/eportal/utils/IOUtils.java b/src/main/java/cn/reddragon/eportal/utils/IOUtils.java index 6c58f13..ca39ee2 100644 --- a/src/main/java/cn/reddragon/eportal/utils/IOUtils.java +++ b/src/main/java/cn/reddragon/eportal/utils/IOUtils.java @@ -1,5 +1,7 @@ package cn.reddragon.eportal.utils; +import cn.reddragon.eportal.EPortal; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -20,7 +22,7 @@ public static String readText(InputStream stream) { } return sb.toString();*/ } catch (IOException e) { - e.printStackTrace(); + EPortal.logger.error("读入数据时出错!", e); return ""; } } diff --git a/src/main/resources/cn/reddragon/eportal/hello-view.fxml b/src/main/resources/cn/reddragon/eportal/hello-view.fxml index a870d94..01d54e7 100644 --- a/src/main/resources/cn/reddragon/eportal/hello-view.fxml +++ b/src/main/resources/cn/reddragon/eportal/hello-view.fxml @@ -6,7 +6,7 @@ - +