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 @@
-
+