Skip to main content

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 message new_chat.
  • Logbook désynchronisé : vérifier teamsLogbooks, puis logbook_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 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

      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.