DON'T LOCK PLAYER!

This commit is contained in:
2023-05-21 21:41:17 +08:00
parent 564f4d1e56
commit 290c4fbf8c
3 changed files with 9 additions and 9 deletions

View File

@ -44,13 +44,11 @@ public final class EventListeners {
* @param uid 玩家uid * @param uid 玩家uid
* @return 新的玩家消息处理类 * @return 新的玩家消息处理类
*/ */
public static StringBuilder getPlayerNewMessageHandler(int uid) { public static StringBuilder getPlayerMessageHandler(int uid) {
var handler = playerMessageHandlers.get(uid); var handler = playerMessageHandlers.get(uid);
if (handler == null) { if (handler == null) {
handler = new StringBuilder(); handler = new StringBuilder();
playerMessageHandlers.put(uid, handler); playerMessageHandlers.put(uid, handler);
} else {
handler.setLength(0);
} }
return handler; return handler;
} }

View File

@ -152,11 +152,12 @@ public final class OpenCommandHandler implements Router {
context.json(new JsonResponse(404, "Player not found")); context.json(new JsonResponse(404, "Player not found"));
return; return;
} }
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerMessageHandler(player.getUid());
//noinspection SynchronizationOnLocalVariableOrMethodParameter //noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (player) { synchronized (handler) {
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerNewMessageHandler(player.getUid());
try { try {
handler.setLength(0);
CommandMap.getInstance().invoke(player, player, command); CommandMap.getInstance().invoke(player, player, command);
context.json(new JsonResponse(handler.toString())); context.json(new JsonResponse(handler.toString()));
} catch (Exception e) { } catch (Exception e) {

View File

@ -159,11 +159,12 @@ public class SocketClient {
sendPacket(new HttpPacket(404, "Player not found."), packet.packetID); sendPacket(new HttpPacket(404, "Player not found."), packet.packetID);
return; return;
} }
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerMessageHandler(playerData.getUid());
//noinspection SynchronizationOnLocalVariableOrMethodParameter //noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (playerData) { synchronized (handler) {
// Player MessageHandler do not support concurrency
var handler = EventListeners.getPlayerNewMessageHandler(playerData.getUid());
try { try {
handler.setLength(0);
CommandMap.getInstance().invoke(playerData, playerData, command); CommandMap.getInstance().invoke(playerData, playerData, command);
sendPacket(new HttpPacket(200, handler.toString()), packet.packetID); sendPacket(new HttpPacket(200, handler.toString()), packet.packetID);
} catch (Exception e) { } catch (Exception e) {