mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-13 05:44:36 +01:00
Dont let people log on to the same player at the same time
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -77,7 +77,7 @@ public class GameSession {
|
||||
// Save first
|
||||
player.save();
|
||||
// Deregister
|
||||
this.getServer().deregisterPlayer(player.getUid());
|
||||
this.getServer().deregisterPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user