Skip to main content

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()

  1. envoie act_generating;
  2. fait jouer les bots si l'activité est async;
  3. génère les events game-specific;
  4. appelle generateResultsByGameUid[gameUid].generateCurrentYearResults(actData);
  5. décide s'il faut démarrer automatiquement l'année suivante;
  6. met à jour nextGenerate;
  7. sauvegarde l'activité;
  8. envoie act_year_finished lorsque requis.

Scripts de job

Les wrappers se trouvent sous server_scripts/_job/, notamment generate_results_job.js et le scheduler commun.