Chat, logbook et présence
Chat
_command/add_chat.js lit teams et chats, ajoute la ligne de chat, met à jour les données nécessaires, sauvegarde les deux documents puis envoie new_chat à l'équipe. get_chats.js lit le document chats.
sequenceDiagram
participant U as Unity
participant C as add_chat
participant T as teams
participant CH as chats
participant RTT as RTT
U->>C: AddChat(teamUid, message)
C->>T: getDocumentData
C->>CH: getDocumentData
C->>CH: append message
C->>T: save
C->>CH: save
C->>RTT: new_chat
RTT-->>U: refresh chat
Logbook
save_logbook.js écrit dans teamsLogbooks et envoie logbook_changed à l'équipe et au professeur. Le runtime commun est représenté par Logbook et exposé via TeamBaseController.Logbook.
Le système supporte aussi restauration d'historique et évaluation du logbook.
Présence
set_presence.js charge userDetails, puis simulation/activity afin de maintenir la présence dans le contexte courant. By Year ajoute les stubs de présence annuels pour l'évaluation.
lastChatTime
Le modèle équipe conserve LastChatTime; le backend expose SetLastChatTime afin que le client puisse distinguer les nouveaux messages.
Debug
- Chat absent : vérifier
chats, puis messagenew_chat. - Logbook désynchronisé : vérifier
teamsLogbooks, puislogbook_changed. - Notification absente : vérifier si le flux concerné utilise RTT BrainCloud ou l'endpoint Web.
- Présence erronée : vérifier heartbeat, userDetails et activité courante.
Modifier ou ajouter un flux de communication
Chat : chemin complet
flowchart LR
UI[ChatPopupControl] --> STUD[Student.SendChat]
STUD --> BE[BackEnd.AddChat]
BE --> CMD[_command/add_chat]
CMD --> TEAMS[(teams)]
CMD --> CHATS[(chats)]
CMD --> RTT[new_chat]
RTT --> CLIENT[listener / UI]
Pour changer le format d'un message de chat, vérifier à la fois le document chats, la désérialisation Unity Chat/ChatEntry et la payload RTT. Le chat initial est chargé par GetChats; RTT ne remplace pas ce chargement.
Logbook : chemin complet
TeamBaseController.SaveLogbookEntry() normalise l'actUid en async puis appelle SaveLogbook. Le serveur persiste dans teamsLogbooks et émet logbook_changed. Les évaluations de logbook sont un flux distinct.
Notifications : attention, backend Web
Les notifications ne suivent pas exactement le même chemin que chat/logbook. NotificationManager.SaveNotification() appelle BackEndBase.SaveNotification(), qui utilise l'endpoint Web /saveNotification. Le chargement passe par /getNotifications/<teacherUid>. En revanche, une notification nouvelle peut arriver au client via le message RTT new_notification.
Ajouter un nouveau type de notification
- Définir un
notificationTypestable. - Définir les champs de
extraDatanécessaires à l'UI. - Appeler
Game.NotificationManager.SaveNotification(). - Ajouter le rendu dans
NotificationData/NotificationListItemsi le type a un comportement spécifique. - Ajouter les textes localisés.
- Tester création, load initial, RTT, mark as read et suppression.
Présence : deux notions à ne pas confondre
- online/heartbeat : endpoint heartbeat toutes les ~5 s, utilisé pour savoir qui est connecté;
- présence évaluée : donnée d'évaluation By Year enregistrée via
set_presence.
Un utilisateur online n'implique pas automatiquement une note de présence, et l'inverse.
Checklist multi-client
- chargement initial correct sans RTT préalable;
- mise à jour live sur second client;
- pas de doublon après relog;
- historique logbook préservé;
- notification persistée même si destinataire offline;
- lastChatTime mis à jour lorsqu'on ouvre/lit le chat.