Skip to content

Commit

Permalink
refactor(Communication): 优化代码,提高可读性和维护性
Browse files Browse the repository at this point in the history
  • Loading branch information
shulng committed Sep 7, 2024
1 parent 11dbfe8 commit 7d193a9
Showing 1 changed file with 34 additions and 50 deletions.
84 changes: 34 additions & 50 deletions src/main/java/cc/baka9/catseedlogin/bukkit/Communication.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,13 @@ public static void socketServerStopAsync() {
}

public static void socketServerStop() {

if (serverSocket != null && !serverSocket.isClosed()) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
CatSeedLogin.instance.getLogger().warning("关闭Socket服务器时发生错误: " + e.getMessage());
}
}

}

/**
Expand All @@ -56,59 +54,48 @@ private static void socketServerStart() {
InetAddress inetAddress = InetAddress.getByName(Config.BungeeCord.Host);
serverSocket = new ServerSocket(Integer.parseInt(Config.BungeeCord.Port), 50, inetAddress);
while (!serverSocket.isClosed()) {
Socket socket;
try {
socket = serverSocket.accept();
try (Socket socket = serverSocket.accept()) {
handleRequest(socket);
} catch (IOException e) {
break;
CatSeedLogin.instance.getLogger().warning("接受Socket连接时发生错误: " + e.getMessage());
}
}
} catch (UnknownHostException e) {
CatSeedLogin.instance.getLogger().warning("无法解析域名或IP地址");
e.printStackTrace();
CatSeedLogin.instance.getLogger().warning("无法解析域名或IP地址: " + e.getMessage());
} catch (IOException e) {
e.printStackTrace();
CatSeedLogin.instance.getLogger().warning("启动Socket服务器时发生错误: " + e.getMessage());
}
}


/**
* 处理请求
*/
private static void handleRequest(Socket socket) throws IOException {
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
String requestType = bufferedReader.readLine();
if (requestType == null) {
socket.close();
return;
}
String playerName = bufferedReader.readLine();
switch (requestType) {
case "Connect":
handleConnectRequest(socket, playerName);
break;
case "KeepLoggedIn":
String time = bufferedReader.readLine();
String sign = bufferedReader.readLine();
handleKeepLoggedInRequest(playerName, time, sign);
break;
default:
break;
}
} finally {
if (!socket.isClosed()) {
socket.close();
private static void handleRequest(Socket socket) throws IOException {
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
String requestType = bufferedReader.readLine();
if (requestType == null) {
return;
}
String playerName = bufferedReader.readLine();
switch (requestType) {
case "Connect":
handleConnectRequest(socket, playerName);
break;
case "KeepLoggedIn":
String time = bufferedReader.readLine();
String sign = bufferedReader.readLine();
handleKeepLoggedInRequest(playerName, time, sign);
break;
default:
CatSeedLogin.instance.getLogger().warning("未知请求类型: " + requestType);
break;
}
}
}
}

private static void handleKeepLoggedInRequest(String playerName, String time, String sign) {
// 验证请求的合法性
// 对比玩家名,时间戳,和authKey加密的结果(加密是因为如果登录服不在内网环境下,则可能会被人使用这个功能给发包来直接绕过登录)
if (CommunicationAuth.encryption(playerName, time, Config.BungeeCord.AuthKey).equals(sign)) {
// 切换主线程给予登录状态
CatScheduler.runTask( () -> {
CatScheduler.runTask(() -> {
LoginPlayer lp = Cache.getIgnoreCase(playerName);
if (lp != null) {
LoginPlayerHelper.add(lp);
Expand All @@ -117,29 +104,26 @@ private static void handleKeepLoggedInRequest(String playerName, String time, St
player.updateInventory();
}
}

});
}
}

private static void handleConnectRequest(Socket socket, String playerName) {
// 切换主线程获取是否已登录
CatScheduler.runTask( () -> {
CatScheduler.runTask(() -> {
boolean result = LoginPlayerHelper.isLogin(playerName);

// 切换异步线程返回结果
CatSeedLogin.instance.runTaskAsync(() -> {
try {
socket.getOutputStream().write(result ? 1 : 0);
socket.close();
} catch (IOException e) {
e.printStackTrace();
CatSeedLogin.instance.getLogger().warning("发送连接结果时发生错误: " + e.getMessage());
} finally {
try {
socket.close();
} catch (IOException e) {
CatSeedLogin.instance.getLogger().warning("关闭Socket时发生错误: " + e.getMessage());
}
}

});

});
}


}

0 comments on commit 7d193a9

Please sign in to comment.