Skip to main content

Notifications et présence

ChatCommunication actuelle : notifications uniquement

_command/add_chat.jsLe litGame teamsenvoie désormais uniquement des notifications. L'ancien flux de chat décrit auparavant sur cette page ne représente plus le fonctionnement courant.

La documentation détaillée est répartie dans Commun :

    Panel Web — notifications et chats,intégration ajouteavec lale ligneGame : envoi, chargement, réception RTT, affichage et ajout d'un type de chat,notification. metLogbook à— joursauvegarde, 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.modèle, persistance, synchronisation, restauration, évaluation et cycle annuel.

    Présence : connexion et évaluation

    set_presence.jsLa chargeprésence userDetails,comprend puisdeux simulation/activitydonnées afindifférentes de:

    maintenir
    Notion Rôle Mécanisme Connexion / online Savoir si l'utilisateur est connecté. Endpoint heartbeat, appelé environ toutes les 5 secondes. Présence évaluée Enregistrer la présence dans le contexte courant.pédagogique By YearYear. ajouteset_presence.js et 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

      présence.

      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 onlineconnecté n'implique pas automatiquement une note de présence, et une présence évaluée ne garantit pas que l'inverse.utilisateur est actuellement connecté.

          ChecklistEnregistrement multi-clientde la présence

          set_presence.js charge userDetails, puis la simulation et l'activité pour maintenir la présence dans le contexte courant.

          En By Year, startYear() initialise un nouveau stub de présence pour les étudiants. Les helpers setYearPresence() et deleteYearPresence() maintiennent les données lors des changements d'état. Une réouverture doit traiter la présence de l'année concernée correctement.

          Voir Évaluations, logbook, scénarios et rankings By Year pour le cycle annuel et Système d'évaluation commun pour les évaluations.

          Diagnostic

          • chargementStatut initialonline correctincorrect sans: RTTvérifier préalable;le heartbeat et la connexion du client.
          • misePrésence évaluée incorrecte : vérifier userDetails, la simulation, l'activité, l'année et le traitement de set_presence.
          Notification absente : suivre le diagnostic de la page Panel Web. Logbook désynchronisé ou note incorrecte : suivre le diagnostic de la page Logbook.

          Références historiques du chat

          L'ancien parcours utilisait ChatPopupControl, Student.SendChat, BackEnd.AddChat, _command/add_chat.js, le document chats et le message new_chat. Le chargement passait par GetChats/get_chats.js. LastChatTime et SetLastChatTime servaient à jourdistinguer liveles surnouveaux secondmessages.

          client;

          Ces

          noms sont conservés comme repères pour lire l'ancien code et les anciennes révisions. Ils ne décrivent pas le flux de doubloncommunication après relog; historique logbook préservé; notification persistée même si destinataire offline; lastChatTime mis à jour lorsqu'on ouvre/lit le chat. actuel.