Installation
tilttek/puzzle-builderPrérequis
- PHP 8.5 ou une version plus récente, avec
intlpour la normalisation des réponses etmbstring. phil/resource0.1, dontResourceReferencenomme une équipe.psr/clocketsymfony/clock, pour l'heure de chaque coup ;psr/event-dispatcher, pour les événements.symfony/rate-limiter, suggéré, pourLimiter\RateLimiterGuessLimiter.
Installer
composer require tilttek/puzzle-builder
composer require symfony/rate-limiter # to count the guesses with a limiter of the component
Brancher la bibliothèque
PuzzleEngine prend le limiteur de propositions, et facultativement un répartiteur d'événements et une horloge :
use Symfony\Component\Clock\NativeClock;
use Symfony\Component\RateLimiter\RateLimiterFactory;
use Symfony\Component\RateLimiter\Storage\CacheStorage;
use Tilttek\PuzzleBuilder\Limiter\RateLimiterGuessLimiter;
use Tilttek\PuzzleBuilder\PuzzleEngine;
$guesses = new RateLimiterFactory(
['id' => 'puzzle_guesses', 'policy' => 'sliding_window', 'limit' => 10, 'interval' => '1 minute'],
new CacheStorage($cachePool), // a store every worker reads
);
$engine = new PuzzleEngine(
new RateLimiterGuessLimiter($guesses), // Contract\GuessLimiter: the guesses of a team on a puzzle in a period
$dispatcher, // Psr\EventDispatcher\EventDispatcherInterface, or null to dispatch nothing
new NativeClock(), // Psr\Clock\ClockInterface: the time of each move, written in UTC
);
Dans une application Symfony, la fabrique est le limiteur déclaré sous framework.rate_limiter, injecté par son nom.
PuzzleEngine ne garde rien entre deux appels : une seule instance sert toutes les requêtes d'un worker. Le limiteur
est obligatoire : il n'y a pas de moteur sans borne sur les propositions. Limiter\InMemoryGuessLimiter compte dans la
mémoire du processus, pour les tests et pour une partie jouée dans un seul processus.