Dont let people log on to the same player at the same time

This commit is contained in:
Melledy
2023-10-03 18:25:33 -07:00
parent 35497776d0
commit 2c7d2272df
4 changed files with 30 additions and 15 deletions

View File

@@ -24,7 +24,7 @@ public class ChatService extends BaseGameService {
}
// Get target
Player target = getServer().getPlayerByUid(targetUid);
Player target = getServer().getOnlinePlayerByUid(targetUid);
if (target == null) {
return;
@@ -35,7 +35,7 @@ public class ChatService extends BaseGameService {
public void sendPrivChat(Player player, int targetUid, int emote) {
// Get target
Player target = getServer().getPlayerByUid(targetUid);
Player target = getServer().getOnlinePlayerByUid(targetUid);
if (target == null) {
return;

View File

@@ -24,6 +24,7 @@ public class GameServer extends KcpServer {
private final RegionInfo info;
private final InetSocketAddress address;
@Getter
private final GameServerPacketHandler packetHandler;
private final Int2ObjectMap<Player> players;
@@ -41,7 +42,7 @@ public class GameServer extends KcpServer {
this.address = new InetSocketAddress(serverConfig.bindAddress, serverConfig.getPort());
this.packetHandler = new GameServerPacketHandler();
this.players = Int2ObjectMaps.synchronize(new Int2ObjectOpenHashMap<>());
this.players = new Int2ObjectOpenHashMap<>();
// Setup managers
this.battleService = new BattleService(this);
@@ -58,20 +59,25 @@ public class GameServer extends KcpServer {
return this.serverConfig;
}
public GameServerPacketHandler getPacketHandler() {
return this.packetHandler;
}
public void registerPlayer(Player player) {
players.put(player.getUid(), player);
synchronized (this.players) {
this.players.put(player.getUid(), player);
}
}
public void deregisterPlayer(Player player) {
synchronized (this.players) {
Player check = this.players.get(player.getUid());
if (check == player) {
this.players.remove(player.getUid());
}
}
}
public void deregisterPlayer(int uid) {
players.remove(uid);
}
public Player getPlayerByUid(int uid) {
return players.get(uid);
public Player getOnlinePlayerByUid(int uid) {
synchronized (this.players) {
return this.players.get(uid);
}
}
public void start() {
@@ -96,6 +102,9 @@ public class GameServer extends KcpServer {
}
private void onShutdown() {
// Close server socket
this.stop();
// Set region info
this.info.setUp(false);
this.info.save();

View File

@@ -77,7 +77,7 @@ public class GameSession {
// Save first
player.save();
// Deregister
this.getServer().deregisterPlayer(player.getUid());
this.getServer().deregisterPlayer(player);
}
}

View File

@@ -35,6 +35,12 @@ public class HandlerPlayerGetTokenCsReq extends PacketHandler {
player = new Player(session);
LunarRail.getGameDatabase().save(player);
}
// Dont let people log on to the same player at the same time
Player prevPlayer = session.getServer().getOnlinePlayerByUid(player.getUid());
if (prevPlayer != null) {
prevPlayer.getSession().close();
}
// Set player object for session
session.setPlayer(player);