feat: Connecting to a game
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user