mirror of
https://github.com/jie65535/gc-opencommand-plugin.git
synced 2025-07-28 18:59:16 +08:00
Prevent some exceptions
This commit is contained in:
parent
67f3eb180d
commit
8030ef8034
@ -96,49 +96,53 @@ public class SocketClient {
|
|||||||
public void run() {
|
public void run() {
|
||||||
//noinspection InfiniteLoopStatement
|
//noinspection InfiniteLoopStatement
|
||||||
while (true) {
|
while (true) {
|
||||||
String data = SocketUtils.readString(is);
|
try {
|
||||||
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
String data = SocketUtils.readString(is);
|
||||||
if (packet.token.equals(token)) {
|
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
||||||
switch (packet.type) {
|
if (packet.token.equals(token)) {
|
||||||
// 玩家类
|
switch (packet.type) {
|
||||||
case Player:
|
// 玩家类
|
||||||
var player = Grasscutter.getGsonFactory().fromJson(packet.data, Player.class);
|
case Player:
|
||||||
switch (player.type) {
|
var player = Grasscutter.getGsonFactory().fromJson(packet.data, Player.class);
|
||||||
// 运行命令
|
switch (player.type) {
|
||||||
case RunCommand -> {
|
// 运行命令
|
||||||
var command = player.data;
|
case RunCommand -> {
|
||||||
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
var command = player.data;
|
||||||
if (playerData == null) {
|
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
||||||
sendPacket(new HttpPacket(404, "Player not found."), packet.packetID);
|
if (playerData == null) {
|
||||||
return;
|
sendPacket(new HttpPacket(404, "Player not found."), packet.packetID);
|
||||||
}
|
return;
|
||||||
// Player MessageHandler do not support concurrency
|
}
|
||||||
//noinspection SynchronizationOnLocalVariableOrMethodParameter
|
// Player MessageHandler do not support concurrency
|
||||||
synchronized (playerData) {
|
//noinspection SynchronizationOnLocalVariableOrMethodParameter
|
||||||
try {
|
synchronized (playerData) {
|
||||||
var resultCollector = new MessageHandler();
|
try {
|
||||||
playerData.setMessageHandler(resultCollector);
|
var resultCollector = new MessageHandler();
|
||||||
CommandMap.getInstance().invoke(playerData, playerData, command);
|
playerData.setMessageHandler(resultCollector);
|
||||||
sendPacket(new HttpPacket(200, resultCollector.getMessage()), packet.packetID);
|
CommandMap.getInstance().invoke(playerData, playerData, command);
|
||||||
} catch (Exception e) {
|
sendPacket(new HttpPacket(200, resultCollector.getMessage()), packet.packetID);
|
||||||
OpenCommandPlugin.getInstance().getLogger().warn("Run command failed.", e);
|
} catch (Exception e) {
|
||||||
sendPacket(new HttpPacket(500, "error", e.getLocalizedMessage()), packet.packetID);
|
OpenCommandPlugin.getInstance().getLogger().warn("Run command failed.", e);
|
||||||
} finally {
|
sendPacket(new HttpPacket(500, "error", e.getLocalizedMessage()), packet.packetID);
|
||||||
playerData.setMessageHandler(null);
|
} finally {
|
||||||
|
playerData.setMessageHandler(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// 发送信息
|
||||||
// 发送信息
|
case DropMessage -> {
|
||||||
case DropMessage -> {
|
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
||||||
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
if (playerData == null) {
|
||||||
if (playerData == null) {
|
return;
|
||||||
return;
|
}
|
||||||
|
playerData.dropMessage(player.data);
|
||||||
}
|
}
|
||||||
playerData.dropMessage(player.data);
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@ public class SocketServer {
|
|||||||
private static final HashMap<String, ClientThread> clientList = new HashMap<>();
|
private static final HashMap<String, ClientThread> clientList = new HashMap<>();
|
||||||
|
|
||||||
private static final HashMap<String, Integer> clientTimeout = new HashMap<>();
|
private static final HashMap<String, Integer> clientTimeout = new HashMap<>();
|
||||||
|
|
||||||
private static Logger mLogger;
|
private static Logger mLogger;
|
||||||
|
|
||||||
public static void startServer() throws IOException {
|
public static void startServer() throws IOException {
|
||||||
@ -145,31 +144,40 @@ public class SocketServer {
|
|||||||
public void run() {
|
public void run() {
|
||||||
// noinspection InfiniteLoopStatement
|
// noinspection InfiniteLoopStatement
|
||||||
while (true) {
|
while (true) {
|
||||||
String data = SocketUtils.readString(is);
|
try {
|
||||||
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
String data = SocketUtils.readString(is);
|
||||||
if (packet.token.equals(token)) {
|
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
||||||
switch (packet.type) {
|
if (packet.token.equals(token)) {
|
||||||
// 缓存玩家列表
|
switch (packet.type) {
|
||||||
case PlayerList -> {
|
// 缓存玩家列表
|
||||||
PlayerList playerList = Grasscutter.getGsonFactory().fromJson(packet.data, PlayerList.class);
|
case PlayerList -> {
|
||||||
SocketData.playerList.put(address, playerList);
|
PlayerList playerList = Grasscutter.getGsonFactory().fromJson(packet.data, PlayerList.class);
|
||||||
}
|
SocketData.playerList.put(address, playerList);
|
||||||
// Http信息返回
|
}
|
||||||
case HttpPacket -> {
|
// Http信息返回
|
||||||
HttpPacket httpPacket = Grasscutter.getGsonFactory().fromJson(packet.data, HttpPacket.class);
|
case HttpPacket -> {
|
||||||
var socketWait = socketDataWaitList.get(packet.packetID);
|
HttpPacket httpPacket = Grasscutter.getGsonFactory().fromJson(packet.data, HttpPacket.class);
|
||||||
if (socketWait == null) {
|
var socketWait = socketDataWaitList.get(packet.packetID);
|
||||||
mLogger.error("HttpPacket: " + packet.packetID + " not found");
|
if (socketWait == null) {
|
||||||
return;
|
mLogger.error("HttpPacket: " + packet.packetID + " not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
socketWait.setData(httpPacket);
|
||||||
|
socketDataWaitList.remove(packet.packetID);
|
||||||
|
}
|
||||||
|
// 心跳包
|
||||||
|
case HeartBeat -> {
|
||||||
|
clientTimeout.put(address, 0);
|
||||||
}
|
}
|
||||||
socketWait.setData(httpPacket);
|
|
||||||
socketDataWaitList.remove(packet.packetID);
|
|
||||||
}
|
|
||||||
// 心跳包
|
|
||||||
case HeartBeat -> {
|
|
||||||
clientTimeout.put(address, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
mLogger.error("[OpenCommand] Client {} disconnect.", address);
|
||||||
|
clientList.remove(address);
|
||||||
|
clientTimeout.remove(address);
|
||||||
|
SocketData.playerList.remove(address);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user