Project

General

Profile

Actions

Feature #8622

closed

Mise en place d'un système de notification PUSH du serveur vers le navigateur WEB

Added by Yohann Chastagnier over 4 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Category:
-
Target version:
Start date:
03/10/2017
Due date:
% Done:

0%

Estimated time:
Livraison en TEST:
Livraison en PROD:

Description

L'objectif de cette FEATURE est de mettre en place un système de notification qui permette au serveur d'envoyer des notifications vers le navigateur WEB, sans que ce dernier fasse une requête explicite.

Afin de mettre à l'épreuve ce système, une première notification sera implémentée afin de notifier les navigateurs WEB de tout changement de l'état des sessions utilisateurs gérées par Silverpeas.
Cette notifications permettra aux navigateurs WEB :
  • de mettre à jour le nombre d'utilisateurs connectés (au regard de l'isolement des domaines s'il en existe)
  • de rediriger l'utilisateur vers la page de login si sa session sur le navigateur est terminée

Related issues

Related to Silverpeas Core - Feature #8789: Rendre plus dynamique les notifications reçues dans la Boîte de notifications des utilisateurs.ClosedYohann Chastagnier05/11/2017

Actions
Actions #1

Updated by Yohann Chastagnier over 4 years ago

  • Status changed from In progress... to Resolved

L'API SSE (Server Sent Event) a été retenue et implémentée dans Silverpeas.
Le serveur peut maintenant notifier le ou les navigateurs WEB (envois d'événements donc) et le navigateur peut de son côté écouter ces événements.

Les deux événements fonctionnels aujourd'hui envoyés sont les suivants :
  • USER_SESSION : cet événement est envoyé vers les navigateurs WEB à chaque connexion ou à chaque déconnexion (manuelle ou forcée) d'un utilisateur.
    Les données suivantes sont transmises via l'événement :
    {
      nbConnectedUsers : /* le nombre total d'utilisateurs connectés, au regard de l'isolement des domaines et du domaine de l'utilisateur qui reçoit l'événement */,
      isOpening : /* booléen qui indique si l'événement est envoyé suite à une connexion (true) (false ou undefined n'ont ici pas de réalité informationnelle). */,
      isClosing : /* booléen qui indique si l'événement est envoyé suite à une déconnexion (true) (false ou undefined n'ont ici pas de réalité informationnelle). */
    }
    
  • USER_SESSION_EXPIRED : cet événement est envoyé vers le navigateur WEB de l'utilisateur pour lequel une déconnexion (manuelle ou forcée) est effectuée.
    La donnée suivante est transmise via l'événement :
    {
      redirectUrl : /* l'url vers laquelle pointer suite à l'expiration de la session de l'utilisateur sur le navigateur WEB */
    }
    

Ces deux événements sont écoutables depuis l'URL /[URL de l'application, silverpeas autrement dit]/sse/common.
Exemple d'une implémentation de l'écoute de l'événement USER_SESSION dans Silverpeas :

spServerEventSource.addEventListener(
  'USER_SESSION',
  function(serverEvent) {
    var data = JSON.parse(serverEvent.data);
    alert('Il y a ' + data.nbConnectedUsers + ' utilisateur(s) connecté(s)');
  },
  'expiredUserSessionListener'
);

spServerEventSource est mis à disposition par SilverpeasLayout (créé dans le cadre du REDMINE #7909). Cette instance permet d'ajouter ou de supprimer facilement des écoutes d'événements communs de Silverpeas (les deux listés ci-dessus), via les méthodes :
  • addEventListener : ajout de l'écoute d'un événement, avec les paramètres :
    • serverEventName : le nom de l'événement écouté
    • listener : la fonction javascript a exécuter lors de la réception d'un événement, l'instance de l'événement est passé en premier paramètre
    • listenerId : un identifiant optionnel. Cet identifiant, s'il est transmis, permet de supprimer l'écoute précédemment mise en place avec le même identifiant
  • removeEventListener : suppression de l'écoute d'un événement, avec les paramètres :
    • serverEventName : le nom de l'événement écouté
    • listenerOrListenerId : function javascript à supprimer des écoutes ou identifiant de la fonction javascript à supprimer

Si le service ci-dessus (spServerEventSource) n'existait pas, il aurait fallu écrire :

var serverEventSource = new EventSource('/silverpeas/sse/common');
serverEventSource.addEventListener(
  'USER_SESSION',
  function(serverEvent) {
    var data = JSON.parse(serverEvent.data);
    alert('Il y a ' + data.nbConnectedUsers + ' utilisateur(s) connecté(s)');
  }
);


Quelques explications sur les Server Sent Event : https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
Pour les navigateurs qui ne sont nativement pas compatibles avec cette API, il existe un polyfill que Silverpeas utilise naturellement : https://github.com/Yaffle/EventSource

Actions #2

Updated by Nicolas Eysseric over 4 years ago

  • Project changed from 143 to Silverpeas Core
  • Target version changed from 6.0 to Version 6
Actions #3

Updated by Yohann Chastagnier over 4 years ago

  • Status changed from Resolved to Closed

Intégré.

Actions #4

Updated by Yohann Chastagnier over 4 years ago

  • Related to Feature #8789: Rendre plus dynamique les notifications reçues dans la Boîte de notifications des utilisateurs. added
Actions

Also available in: Atom PDF