Aller au contenu

GUI ↔ Serveur

Après le handshake GUI, le visualiseur peut interroger le serveur, et reçoit en continu des événements décrivant l'évolution du monde. Tous les identifiants sont préfixés # ; directions et ressources suivent les encodages de la Vue d'ensemble.

Sources : server/srcs/core/GuiCommandHandler.cpp (requêtes entrantes), server/srcs/protocol/GUIProtocol.cpp (événements sortants), gui/src/network/MessageParser.cpp (réception côté GUI).

Requêtes GUI → Serveur

Requête Format Effet
Taille de la carte msz Renvoie msz X Y.
Unité de temps sgt Renvoie sgt T.
Toute la carte mct Renvoie le contenu de toutes les tuiles (série de bct).
Noms d'équipes tna Renvoie un tna par équipe.
Contenu d'une tuile bct X Y Renvoie bct X Y q0..q6.
Position d'un joueur ppo #n Renvoie ppo #n X Y O.
Niveau d'un joueur plv #n Renvoie plv #n L.
Inventaire d'un joueur pin #n Renvoie pin #n X Y q0..q6.
Modifier l'unité de temps sst T Change la fréquence et renvoie sst T.

Réponses d'erreur

Réponse Cause
suc Commande inconnue (unknown command).
sbp Paramètres incorrects sur une commande connue (bad parameters).

(GuiCommandHandler.cpp:22-147.)

Événements Serveur → GUI

Événement Format Signification
msz msz X Y Taille de la carte.
sgt sgt T Fréquence / unité de temps.
tna tna N Nom d'une équipe (répété par équipe).
pnw pnw #id X Y O L N Nouveau joueur : position, orientation O (1N/2E/3S/4O), niveau L, équipe N.
ppo ppo #id X Y O Position et orientation d'un joueur.
pdi pdi #id Mort d'un joueur.
bct bct X Y q0 q1 q2 q3 q4 q5 q6 Contenu d'une tuile (food, linemate, deraumere, sibur, mendiane, phiras, thystame).
mct série de bct Contenu de toute la carte (voir l'avertissement).
plv plv #id L Niveau d'un joueur.
pin pin #id X Y q0..q6 Inventaire d'un joueur (food en quantité brute).
pgt pgt #id i Un joueur ramasse la ressource d'index i (0..6).
pdr pdr #id i Un joueur dépose la ressource d'index i.
pic pic X Y L #id ... Début d'incantation en (X,Y) niveau L, avec la liste des participants.
pie pie X Y R Fin d'incantation : R = 1 (succès) ou 0 (échec).
pbc pbc #id M Un joueur émet un broadcast de message M.
pfk pfk #id Un joueur pond un œuf (fork).
pex pex #id Un joueur en expulse d'autres (eject).
enw enw #œuf #joueur X Y Nouvel œuf pondu par le joueur #joueur.
ebo ebo #œuf Un œuf éclot (connexion d'une IA).
edi edi #œuf Mort d'un œuf.
seg seg N Fin de partie : l'équipe N a gagné.
smg smg M Message du serveur.
sst sst T Confirmation du changement d'unité de temps.

(GUIProtocol.cpp.)

Encodages

Orientation O : 1 Nord, 2 Est, 3 Sud, 4 Ouest. Index ressource i : 0 food, 1 linemate, 2 deraumere, 3 sibur, 4 mendiane, 5 phiras, 6 thystame. Détails en Vue d'ensemble.

Exemples de trames

S -> C : bct 3 4 1 0 0 0 0 0 0
La tuile (3,4) contient 1 nourriture et aucune pierre.

S -> C : pnw #1 4 5 2 1 team1
Joueur #1 apparu en (4,5), orienté Est (2), niveau 1, équipe team1.

S -> C : ppo #1 5 5 3
Joueur #1 désormais en (5,5), orienté Sud (3).

S -> C : pic 4 5 2 #1 #2
S -> C : pie 4 5 1
Incantation démarrée en (4,5) pour le niveau 2 avec les joueurs #1 et #2, puis terminée avec succès (pie ... 1).

Limites côté GUI

Événements ignorés / mct détaillé en bct

Le GUI actuel n'a pas de handler pour sst, suc ni sbp (il ne fait qu'envoyer GRAPHIC au démarrage et ne génère donc jamais ces réponses). Par ailleurs, le serveur n'émet jamais de mct agrégé : il l'« explose » en une série de bct, et le handler onMct du GUI est un no-op volontaire. L'événement smg est défini côté serveur mais sans site d'appel (inutilisé). Voir Limitations connues et GUI.