Cycle d’une année, calendrier et jobs
startYear()
utils_by_year.startYear(actData, updateYearFinished) incrémente l'année si nécessaire, passe l'état à ACT_YEAR_STARTED, enregistre startTime, appelle startYearGameSpec(), initialise les stubs de présence puis envoie act_year_started.
stateDiagram-v2
[*] --> NotStarted
NotStarted --> YearStarted: startYear
YearStarted --> Generating: fin de période / commande
Generating --> YearFinished: génération terminée
YearFinished --> YearStarted: année suivante
YearFinished --> [*]: dernière année
nextGenerate
updateNextGenerateDate() calcule quand le prochain traitement automatique doit avoir lieu. En pratique, les années n'ont pas de génération automatique. En mode calendrier, nextGenerate pointe vers la fin de l'année active ou le début de la suivante.
Validation des dates
validateDates() corrige les années mal ordonnées ou placées dans le passé et garantit notamment un intervalle minimal de cinq minutes. Si des dates sont déplacées, le professeur peut recevoir years_date_modified.
Job planifié
gatherActsForJob() récupère les activités dont nextGenerate < now. runActJob() traite une activité active : si l'année est commencée, elle passe à generating et appelle generateResultsJob(); sinon elle peut démarrer l'année suivante.
generateResultsJob()
- envoie
act_generating; - fait jouer les bots si l'activité est async;
- génère les events game-specific;
- appelle
generateResultsByGameUid[gameUid].generateCurrentYearResults(actData); - décide s'il faut démarrer automatiquement l'année suivante;
- met à jour
nextGenerate; - sauvegarde l'activité;
- envoie
act_year_finishedlorsque requis.
Scripts de job
Les wrappers se trouvent sous server_scripts/_job/, notamment generate_results_job.js et le scheduler commun.