From 290c4fbf8ccff7804a0e8c725a7ab877f66da4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Sun, 21 May 2023 21:41:17 +0800 Subject: [PATCH] DON'T LOCK PLAYER! --- .../com/github/jie65535/opencommand/EventListeners.java | 4 +--- .../github/jie65535/opencommand/OpenCommandHandler.java | 7 ++++--- .../github/jie65535/opencommand/socket/SocketClient.java | 7 ++++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/jie65535/opencommand/EventListeners.java b/src/main/java/com/github/jie65535/opencommand/EventListeners.java index fa41be9..fc3a40a 100644 --- a/src/main/java/com/github/jie65535/opencommand/EventListeners.java +++ b/src/main/java/com/github/jie65535/opencommand/EventListeners.java @@ -44,13 +44,11 @@ public final class EventListeners { * @param uid 玩家uid * @return 新的玩家消息处理类 */ - public static StringBuilder getPlayerNewMessageHandler(int uid) { + public static StringBuilder getPlayerMessageHandler(int uid) { var handler = playerMessageHandlers.get(uid); if (handler == null) { handler = new StringBuilder(); playerMessageHandlers.put(uid, handler); - } else { - handler.setLength(0); } return handler; } diff --git a/src/main/java/com/github/jie65535/opencommand/OpenCommandHandler.java b/src/main/java/com/github/jie65535/opencommand/OpenCommandHandler.java index 9f8595b..5288363 100644 --- a/src/main/java/com/github/jie65535/opencommand/OpenCommandHandler.java +++ b/src/main/java/com/github/jie65535/opencommand/OpenCommandHandler.java @@ -152,11 +152,12 @@ public final class OpenCommandHandler implements Router { context.json(new JsonResponse(404, "Player not found")); return; } + // Player MessageHandler do not support concurrency + var handler = EventListeners.getPlayerMessageHandler(player.getUid()); //noinspection SynchronizationOnLocalVariableOrMethodParameter - synchronized (player) { - // Player MessageHandler do not support concurrency - var handler = EventListeners.getPlayerNewMessageHandler(player.getUid()); + synchronized (handler) { try { + handler.setLength(0); CommandMap.getInstance().invoke(player, player, command); context.json(new JsonResponse(handler.toString())); } catch (Exception e) { diff --git a/src/main/java/com/github/jie65535/opencommand/socket/SocketClient.java b/src/main/java/com/github/jie65535/opencommand/socket/SocketClient.java index 4c9e0b2..e32cebd 100644 --- a/src/main/java/com/github/jie65535/opencommand/socket/SocketClient.java +++ b/src/main/java/com/github/jie65535/opencommand/socket/SocketClient.java @@ -159,11 +159,12 @@ public class SocketClient { sendPacket(new HttpPacket(404, "Player not found."), packet.packetID); return; } + // Player MessageHandler do not support concurrency + var handler = EventListeners.getPlayerMessageHandler(playerData.getUid()); //noinspection SynchronizationOnLocalVariableOrMethodParameter - synchronized (playerData) { - // Player MessageHandler do not support concurrency - var handler = EventListeners.getPlayerNewMessageHandler(playerData.getUid()); + synchronized (handler) { try { + handler.setLength(0); CommandMap.getInstance().invoke(playerData, playerData, command); sendPacket(new HttpPacket(200, handler.toString()), packet.packetID); } catch (Exception e) {