Aller au contenu

Événements

Chaque événement APIExpose est une enveloppe JSON poussée en WebSocket :

{
  "Type": "ui.game.started",
  "Ts": "2026-07-08T13:05:12.412Z",
  "NodeId": "cab-01",
  "CorrelationId": "6f0c…",
  "Payload": { }
}

Le SDK la normalise avant vos handlers :

client.on('game.changed', (event) => {
  event.type;      // nom normalisé qui a matché votre abonnement
  event.rawType;   // Type APIExpose d'origine, ex. "ui.game.started"
  event.timestamp; // chaîne ISO
  event.nodeId;    // "cab-01"
  event.payload;   // Payload, camelCase et PascalCase acceptés
});

Le type brut est toujours réémis tel quel en plus de tout alias — rien n'est masqué. Le JSON Schema de l'enveloppe : schemas/event.schema.json.

Alias normalisés

Alias Préfixe / type brut Se déclenche quand
game.changed ui.game.selected* (dédupliqué par système+rom) un jeu différent est sélectionné ou lancé
game.selected ui.game.selected* chaque événement de sélection
system.changed ui.system.selected* le système ES change
score.changed score.live.* le score live change en jeu
timer.changed timer.live.* le timer live avance
hiscore.changed hiscore.* les hiscores sont rafraîchis
achievement.unlocked retroachievements.achievement.unlock* un succès RetroAchievements tombe
arcade.output.changed mame.output.changed, arcade.output* lampes & sorties MAME/FBNeo
media.changed media.* activité médias/scraping
panel.changed panel.state le layout du panel change
connection.lost / connection.restored (interne SDK) connectivité WebSocket

Jokers

client.on('retroachievements.*', handler); // tout type brut avec ce préfixe
client.on('*', handler);                   // tout (utilisé par le debug monitor)

Types réels, observés en live

Capturés sur APIExpose 1.1.1 au lancement de Sonic The Hedgehog (Megadrive, RetroArch) :

ui.game.started.raw / ui.game.started
retroarch.wrapper.connected
retroarch.memory.changed
retroachievements.session.login.detected
retroachievements.session.started
retroachievements.session.updated
retroachievements.catalog.updated
retroachievements.achievementsets.loaded
retroachievements.proxy.requested / retroachievements.proxy.response
panel.state
cpo.panel.config.selected
marquee.snapshot / marquee.snapshot.updated
topper.snapshot
instruction-card.snapshot
screen.snapshot

Pendant le jeu (y compris le mode démo d'ES), score.live.changed et timer.live.changed circulent pour les systèmes avec support de score.

Les payloads varient

Les payloads sont propres à chaque événement et peuvent évoluer avec APIExpose. Traitez les champs inconnus comme optionnels — le Event Debug Monitor est le moyen le plus rapide d'inspecter les payloads exacts de votre installation.