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() {
|
||||
//noinspection InfiniteLoopStatement
|
||||
while (true) {
|
||||
String data = SocketUtils.readString(is);
|
||||
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
||||
if (packet.token.equals(token)) {
|
||||
switch (packet.type) {
|
||||
// 玩家类
|
||||
case Player:
|
||||
var player = Grasscutter.getGsonFactory().fromJson(packet.data, Player.class);
|
||||
switch (player.type) {
|
||||
// 运行命令
|
||||
case RunCommand -> {
|
||||
var command = player.data;
|
||||
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
||||
if (playerData == null) {
|
||||
sendPacket(new HttpPacket(404, "Player not found."), packet.packetID);
|
||||
return;
|
||||
}
|
||||
// Player MessageHandler do not support concurrency
|
||||
//noinspection SynchronizationOnLocalVariableOrMethodParameter
|
||||
synchronized (playerData) {
|
||||
try {
|
||||
var resultCollector = new MessageHandler();
|
||||
playerData.setMessageHandler(resultCollector);
|
||||
CommandMap.getInstance().invoke(playerData, playerData, command);
|
||||
sendPacket(new HttpPacket(200, resultCollector.getMessage()), packet.packetID);
|
||||
} catch (Exception e) {
|
||||
OpenCommandPlugin.getInstance().getLogger().warn("Run command failed.", e);
|
||||
sendPacket(new HttpPacket(500, "error", e.getLocalizedMessage()), packet.packetID);
|
||||
} finally {
|
||||
playerData.setMessageHandler(null);
|
||||
try {
|
||||
String data = SocketUtils.readString(is);
|
||||
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
||||
if (packet.token.equals(token)) {
|
||||
switch (packet.type) {
|
||||
// 玩家类
|
||||
case Player:
|
||||
var player = Grasscutter.getGsonFactory().fromJson(packet.data, Player.class);
|
||||
switch (player.type) {
|
||||
// 运行命令
|
||||
case RunCommand -> {
|
||||
var command = player.data;
|
||||
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
||||
if (playerData == null) {
|
||||
sendPacket(new HttpPacket(404, "Player not found."), packet.packetID);
|
||||
return;
|
||||
}
|
||||
// Player MessageHandler do not support concurrency
|
||||
//noinspection SynchronizationOnLocalVariableOrMethodParameter
|
||||
synchronized (playerData) {
|
||||
try {
|
||||
var resultCollector = new MessageHandler();
|
||||
playerData.setMessageHandler(resultCollector);
|
||||
CommandMap.getInstance().invoke(playerData, playerData, command);
|
||||
sendPacket(new HttpPacket(200, resultCollector.getMessage()), packet.packetID);
|
||||
} catch (Exception e) {
|
||||
OpenCommandPlugin.getInstance().getLogger().warn("Run command failed.", e);
|
||||
sendPacket(new HttpPacket(500, "error", e.getLocalizedMessage()), packet.packetID);
|
||||
} finally {
|
||||
playerData.setMessageHandler(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 发送信息
|
||||
case DropMessage -> {
|
||||
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
||||
if (playerData == null) {
|
||||
return;
|
||||
// 发送信息
|
||||
case DropMessage -> {
|
||||
var playerData = OpenCommandPlugin.getInstance().getServer().getPlayerByUid(player.uid);
|
||||
if (playerData == null) {
|
||||
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, Integer> clientTimeout = new HashMap<>();
|
||||
|
||||
private static Logger mLogger;
|
||||
|
||||
public static void startServer() throws IOException {
|
||||
@ -145,31 +144,40 @@ public class SocketServer {
|
||||
public void run() {
|
||||
// noinspection InfiniteLoopStatement
|
||||
while (true) {
|
||||
String data = SocketUtils.readString(is);
|
||||
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
||||
if (packet.token.equals(token)) {
|
||||
switch (packet.type) {
|
||||
// 缓存玩家列表
|
||||
case PlayerList -> {
|
||||
PlayerList playerList = Grasscutter.getGsonFactory().fromJson(packet.data, PlayerList.class);
|
||||
SocketData.playerList.put(address, playerList);
|
||||
}
|
||||
// Http信息返回
|
||||
case HttpPacket -> {
|
||||
HttpPacket httpPacket = Grasscutter.getGsonFactory().fromJson(packet.data, HttpPacket.class);
|
||||
var socketWait = socketDataWaitList.get(packet.packetID);
|
||||
if (socketWait == null) {
|
||||
mLogger.error("HttpPacket: " + packet.packetID + " not found");
|
||||
return;
|
||||
try {
|
||||
String data = SocketUtils.readString(is);
|
||||
Packet packet = Grasscutter.getGsonFactory().fromJson(data, Packet.class);
|
||||
if (packet.token.equals(token)) {
|
||||
switch (packet.type) {
|
||||
// 缓存玩家列表
|
||||
case PlayerList -> {
|
||||
PlayerList playerList = Grasscutter.getGsonFactory().fromJson(packet.data, PlayerList.class);
|
||||
SocketData.playerList.put(address, playerList);
|
||||
}
|
||||
// Http信息返回
|
||||
case HttpPacket -> {
|
||||
HttpPacket httpPacket = Grasscutter.getGsonFactory().fromJson(packet.data, HttpPacket.class);
|
||||
var socketWait = socketDataWaitList.get(packet.packetID);
|
||||
if (socketWait == null) {
|
||||
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