This commit is contained in:
2022-01-13 22:04:54 +01:00
parent 4d98c939a0
commit e37efcc5b4
6 changed files with 76 additions and 35 deletions

View File

@@ -13,7 +13,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Lobby {
@Language("RegExp")
private static final String SESSION_NAME_PATTERN = "[a-zA-Z0-9_ ]{1,20}";
private static final String SESSION_NAME_PATTERN = "[a-zA-Z0-9_' ]{1,20}";
private static final Lobby INSTANCE = new Lobby();
public static Lobby getInstance() {
return INSTANCE;

View File

@@ -1,8 +1,11 @@
package eu.jonahbauer.wizard.server;
import eu.jonahbauer.wizard.common.messages.client.InteractionMessage;
import eu.jonahbauer.wizard.common.messages.data.PlayerData;
import eu.jonahbauer.wizard.common.messages.data.SessionData;
import eu.jonahbauer.wizard.common.messages.observer.ObserverMessage;
import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage;
import eu.jonahbauer.wizard.common.messages.player.ContinueMessage;
import eu.jonahbauer.wizard.common.messages.player.PlayerMessage;
import eu.jonahbauer.wizard.common.messages.server.*;
import eu.jonahbauer.wizard.common.model.Configuration;
@@ -28,7 +31,7 @@ import java.util.concurrent.ThreadLocalRandom;
@EqualsAndHashCode(of = "uuid")
public class Session implements Observer {
@Language("RegExp")
private static final String PLAYER_NAME_PATTERN = "[a-zA-Z0-9_ ]{1,20}";
private static final String PLAYER_NAME_PATTERN = "[a-zA-Z0-9_' ]{1,20}";
protected static final int MIN_PLAYERS = 3;
protected static final int MAX_PLAYERS = 6;
@@ -240,6 +243,7 @@ public class Session implements Observer {
var gameMessage = new GameMessage(message);
notifyPlayers(gameMessage);
messages.add(Pair.of(null, gameMessage));
autoSync(null, message);
}
@Override
@@ -247,6 +251,23 @@ public class Session implements Observer {
var gameMessage = new GameMessage(message);
players.get(player).send(gameMessage);
messages.add(Pair.of(player, gameMessage));
autoSync(player, message);
}
/**
* Automatically sends {@link ContinueMessage}s for disconnected players.
*/
private void autoSync(UUID player, ObserverMessage observerMessage) {
if (observerMessage instanceof UserInputMessage userInput) {
if (userInput.getAction() == UserInputMessage.Action.SYNC) {
for (var p : (player != null ? List.of(player) : players.keySet())) {
var sessionPlayer = players.get(p);
if (sessionPlayer != null && !sessionPlayer.isConnected()) {
game.onMessage(p, new ContinueMessage());
}
}
}
}
}
@Data