new_bot_game starts a game against the bot at the chosen level and ends the search for an opponent. BotPlayer works out the bot's moves on its own thread pool and plays them on the game loop after the previous move's animation and a thinking time. Bot games keep their settings across restarts.
32 lines
1.2 KiB
Java
32 lines
1.2 KiB
Java
package app.playmancala.game;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.security.MessageDigest;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.util.HexFormat;
|
|
|
|
import app.playmancala.auth.KeycloakTokenVerifier;
|
|
import app.playmancala.bot.BotLevel;
|
|
|
|
// Ids of legacy userKey users are the secret they log in with, so anything saved or listed publicly uses a hash
|
|
// instead. Keycloak ids and bot ids are not secret and stay as they are.
|
|
public final class PublicIds {
|
|
private static final String LEGACY_PUBLIC_ID_PREFIX = "legacy:";
|
|
|
|
private PublicIds() {
|
|
}
|
|
|
|
public static String publicUserId(String userId) {
|
|
if (userId.startsWith(KeycloakTokenVerifier.KEYCLOAK_USER_ID_PREFIX) || userId.startsWith(LEGACY_PUBLIC_ID_PREFIX)
|
|
|| BotLevel.isBotId(userId)) {
|
|
return userId;
|
|
}
|
|
try {
|
|
byte[] hash = MessageDigest.getInstance("SHA-256").digest(userId.getBytes(StandardCharsets.UTF_8));
|
|
return LEGACY_PUBLIC_ID_PREFIX + HexFormat.of().formatHex(hash).substring(0, 20);
|
|
} catch (NoSuchAlgorithmException e) {
|
|
throw new IllegalStateException(e);
|
|
}
|
|
}
|
|
}
|