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
* @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;
}

View File

@ -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) {

View File

@ -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) {