feat: Player disconnect handler

This commit is contained in:
2026-02-03 20:52:36 +01:00
parent f6de75afd9
commit faadc92dbc
8 changed files with 57 additions and 12 deletions

View File

@@ -5,17 +5,16 @@ import cz.jzitnik.common.socket.messages.game.connection.ConnectToAGame;
import cz.jzitnik.common.socket.messages.game.connection.ConnectToAGameResponse;
import cz.jzitnik.common.socket.messages.player.PlayerArrivalChange;
import cz.jzitnik.common.socket.messages.player.PlayerJoined;
import cz.jzitnik.common.socket.messages.player.PlayerRotation;
import cz.jzitnik.server.annotations.EventHandler;
import cz.jzitnik.server.context.GlobalContext;
import cz.jzitnik.server.events.AbstractEventHandler;
import cz.jzitnik.server.game.Client;
import cz.jzitnik.server.game.Player;
import lombok.extern.slf4j.Slf4j;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectReader;
import tools.jackson.dataformat.yaml.YAMLFactory;
@Slf4j
@EventHandler(ConnectToAGame.class)
public class ConnectToAGameHandler extends AbstractEventHandler<ConnectToAGame> {
public ConnectToAGameHandler(GlobalContext globalContext) {
@@ -24,7 +23,6 @@ public class ConnectToAGameHandler extends AbstractEventHandler<ConnectToAGame>
@Override
public void handle(ConnectToAGame event, Client client) {
log.debug("Pepa");
var gameOptional = globalContext.getGame(event.gamePass().toUpperCase());
if (gameOptional.isEmpty()) {
@@ -49,8 +47,8 @@ public class ConnectToAGameHandler extends AbstractEventHandler<ConnectToAGame>
cl.getSession().sendMessage(new PlayerJoined(player));
if (cl.getPlayer().getCurrentRoom().equals(defaultRoomId)) {
cl.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), player.getPlayerCords(), true, true));
client.getSession().sendMessage(new PlayerArrivalChange(cl.getPlayer().getId(), cl.getPlayer().getCords(), true, false));
cl.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), player.getPlayerCords(), PlayerRotation.FRONT, true, true));
client.getSession().sendMessage(new PlayerArrivalChange(cl.getPlayer().getId(), cl.getPlayer().getCords(), PlayerRotation.FRONT, true, false));
}
}

View File

@@ -40,9 +40,9 @@ public class MovePlayerRoomHandler extends AbstractEventHandler<MovePlayerRoom>
if (player.getPlayer().getId() != client.getPlayer().getId()) {
if (player.getPlayer().getCurrentRoom().equals(oldRoomId)) {
log.debug("{}", event.oldCords());
player.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), event.oldCords(), false, true));
player.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), event.oldCords(), client.getPlayer().getPlayerRotation(), false, true));
} else if (player.getPlayer().getCurrentRoom().equals(event.newRoomId())) {
player.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), event.newCords(), true, true));
player.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), event.newCords(), client.getPlayer().getPlayerRotation(), true, true));
}
}
}

View File

@@ -1,6 +1,8 @@
package cz.jzitnik.server.socket;
import cz.jzitnik.common.socket.SocketMessage;
import cz.jzitnik.common.socket.messages.player.PlayerArrivalChange;
import cz.jzitnik.common.socket.messages.player.PlayerDisconnected;
import cz.jzitnik.server.game.Client;
import cz.jzitnik.server.context.GlobalContext;
import jakarta.websocket.*;
@@ -37,7 +39,24 @@ public class WebSocket {
@OnClose
public void onClose(Session session, CloseReason reason) {
System.out.println("Connection closed: " + reason);
Client client = globalContext.getSessions().get(session);
client.getGame().getPlayers().remove(client);
for (Client otherClient : client.getGame().getPlayers()) {
if (otherClient.getPlayer().getCurrentRoom().equals(client.getPlayer().getCurrentRoom())) {
otherClient.getSession().sendMessage(new PlayerArrivalChange(
client.getPlayer().getId(),
client.getPlayer().getCords(),
client.getPlayer().getPlayerRotation(),
false,
true
));
}
otherClient.getSession().sendMessage(new PlayerDisconnected(client.getPlayer().getId()));
}
log.debug("Connection closed: {}", reason);
}
@OnError