feat: Connecting to a game

This commit is contained in:
2026-02-02 19:18:25 +01:00
parent 92eb93815d
commit 24f54b8b7a
11 changed files with 129 additions and 10 deletions

View File

@@ -9,10 +9,7 @@ import lombok.Setter;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.*;
public class GlobalContext {
@Getter
@@ -32,6 +29,10 @@ public class GlobalContext {
sessions.put(client.getSession().getSession(), client);
}
public Optional<Game> getGame(String pass) {
return games.stream().filter(game -> game.getPassword().equals(pass)).findFirst();
}
public GlobalContext() {
Properties props = new Properties();

View File

@@ -1,8 +1,12 @@
package cz.jzitnik.server.events;
import cz.jzitnik.common.socket.SocketMessage;
import cz.jzitnik.server.context.GlobalContext;
import cz.jzitnik.server.game.Client;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public abstract class AbstractEventHandler<T extends SocketMessage> {
protected final GlobalContext globalContext;
public abstract void handle(T event, Client client);
}

View File

@@ -0,0 +1,46 @@
package cz.jzitnik.server.events.handlers;
import cz.jzitnik.common.models.player.PlayerCreation;
import cz.jzitnik.common.socket.messages.game.connection.ConnectToAGame;
import cz.jzitnik.common.socket.messages.game.connection.ConnectToAGameResponse;
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) {
super(globalContext);
}
@Override
public void handle(ConnectToAGame event, Client client) {
log.debug("Pepa");
var gameOptional = globalContext.getGame(event.gamePass().toUpperCase());
if (gameOptional.isEmpty()) {
client.getSession().sendMessage(new ConnectToAGameResponse());
return;
}
var game = gameOptional.get();
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
ObjectReader playerReader = objectMapper.readerFor(PlayerCreation.class);
PlayerCreation player = playerReader.readValue(getClass().getClassLoader().getResourceAsStream("setup/player.yaml"));
client.setPlayer(new Player(game.getPlayers().size(), player.getPlayerCords()));
client.setGame(game);
client.getPlayer().setCurrentRoom(globalContext.getProperties().getProperty("rooms.default"));
game.getPlayers().add(client);
client.getSession().sendMessage(new ConnectToAGameResponse(player));
}
}

View File

@@ -19,10 +19,11 @@ import tools.jackson.dataformat.yaml.YAMLFactory;
import java.util.ArrayList;
import java.util.List;
@RequiredArgsConstructor
@EventHandler(CreateGame.class)
public class CreateGameHandler extends AbstractEventHandler<CreateGame> {
private final GlobalContext globalContext;
public CreateGameHandler(GlobalContext globalContext) {
super(globalContext);
}
@Override
public void handle(CreateGame event, Client client) {

View File

@@ -6,12 +6,12 @@ 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 lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@EventHandler(PlayerMove.class)
public class PlayerMoveHandler extends AbstractEventHandler<PlayerMove> {
private final GlobalContext globalContext;
public PlayerMoveHandler(GlobalContext globalContext) {
super(globalContext);
}
@Override
public void handle(PlayerMove event, Client client) {

View File

@@ -3,7 +3,7 @@ package cz.jzitnik.server.utils;
import java.security.SecureRandom;
public class PasswordGenerator {
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static final SecureRandom RANDOM = new SecureRandom();
public static String generatePassword(int length) {