Chat, logbook, notifications 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
notificationType stable.
Définir les champs de extraData nécessaires à l'UI.
Appeler Game.NotificationManager.SaveNotification().
Ajouter le rendu dans NotificationData/NotificationListItem si 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
set_presence.
Un utilisateur online n'implique pas automatiquement une note de présence, et l'inverse.