L’Architecture
Parlons peu, parlons technique.
Quelle architecture choisir afin d’intégrer Zoom et ses fonctionnalités dans une plateforme d’enseignement à distance ?
Le schéma ci-dessous vous donnera quelques indices, le texte qui suit vous détaillera l’approche suivie.
Figure 5 : Architecture de l'application LCTL, intégrant l'outil Zoom L’interface avec laquelle interagit l’utilisateur est une application web créée à l’aide du framework Angular. Celle-ci intègre le « Zoom Meeting SDK » permettant de visionner une réunion Zoom dans une page web. Le SDK web n’offrant pas la fonctionnalité de tableau blanc, l’application intègre un outil open-source « Fabric.js » dont les API permettent l’implémentation des fonctionnalités classiques : création de formes 2D, coloration, dessin ou encore l’intégration d’images.
En complément, l’écosystème LCTL intègre une application Node.js qui, couplée à d’autres librairies, fait office de serveur et expose notamment une API REST à destination de l’interface cliente. L’accès et la gestion des ressources sont assurés par le biais d’opérations CRUD (Create, Retrieve, Update, Delete) initiées par le client : création d’une matière, d’une salle de cours, modification d’un groupe d’étude, suppression d’une pièce jointe, etc. Le contrôle d’accès à ces dites ressources est garanti par le serveur, qui internalise partiellement l’authentification au SI de l’UGA et la gestion des habilitations. Le CAS et le LDAP mis à disposition par l’UGA sont des représentants du fournisseur d’identité (IdP), lorsque l’écosystème LCTL joue le rôle de fournisseur de service.
Le serveur LCTL communique avec l’API REST « Meeting » de Zoom, dans le contexte d’une création ou modification de réunion. De fait, lorsqu’une salle de cours est créée par un utilisateur, une réunion Zoom est créée via l’API et associée à cette salle. De la même manière, lorsqu’une salle de cours est modifiée et plus particulièrement la configuration de ses sous-salles, cette modification est à répercuter au niveau de la réunion Zoom associée, également via l’API.
En outre, le besoin d’établir une communication bidirectionnelle entre le serveur LCTL et chaque utilisateur connecté à la plateforme était nécessaire, afin de rendre compte des changements d’état ayant lieu au sein d’une même réunion.
Un premier exemple : un utilisateur joignant une sous-salle. Du fait de représenter visuellement l’organisation de ces sous-salles dans l’interface web, il était nécessaire d’avoir un moyen de faire transiter l’information en « temps réel » entre les différents utilisateurs de la réunion.
Un autre exemple : le tableau blanc. Pour rappel, cette fonctionnalité étant implémentée par LCTL, il était également nécessaire de représenter les changements effectués sur chaque tableau blanc (une sous-salle = un tableau blanc) entre les différents utilisateurs d’une même sous-salle.
La librairie utilisée pour assurer cette communication bidirectionnelle est « Socket.io ».
Une autre fonctionnalité proposée par LCTL, qui s'appuie sur cette communication bidirectionnelle, est la demande d’aide : un.e étudiant.e, une fois avoir rejoint une sous-salle, a la possibilité de demander de l’aide à un responsable. Cette information devait être visible en temps réel dans l’interface web, de même que le système de chat associé.
Et concrètement après 4 sprints de 2 semaines cela donne ça :
Figure 6 : Interface permettant le monitoring des déplacements des participants entre la salle principale et les sous-salles via un espace type "Plan 2D".