Filtrage des messages
La dernière amélioration apportée à notre serveur de chat consiste à pouvoir bloquer ou autoriser les messages émanant des autres utilisateurs
Notre protocole doit à nouveau s'enrichir de deux types d'événement.
Nom | Paramètre | Définition | Réponse possible |
---|---|---|---|
>block |
pseudo | Blocage des messages d'un utilisateur | |
>accept |
pseudo | Autorisation des messages d'un utilisateur |
Gestion des autorisations
Côté serveur
Le serveur va être en charge de maintenir à jour la liste des autorisations par utilisateur pour déterminer les destinataires concernés par l'envoi d'un message d'un expéditeur donné.
Pour cela, je propose de mettre en place un objet acceptMessagesBy
dont les clés correspondront aux expéditeurs et les valeurs associées aux destinataires
concernés, c'est à dire ayant autorisé les messages de cet expéditeur.
{
'o.nocent': ['o.nocent', 'd.gillard', 'f.blanchard'],
'd.gillard': ['d.gillard', 'f.blanchard'],
'f.blanchard': ['f.blanchard']
}
Dans l'exemple ci-dessus, o.nocent
peut écrire à tous les utilisateurs :
personne ne l'a bloqué. À l'inverse, il a bloqué d.gillard
car son pseudo n'apparaît
pas dans le tableau acceptMessagesBy['d.gillard']
. De même, f.blanchard
a été bloqué par tout le monde car il ne peut écrire qu'à lui-même.
Exercice
Modifiez la liste retournée avec l'événement de type <users
afin d'y ajouter l'information d'autorisation. Conformément à l'exemple ci-dessus,
l'utilisateur o.nocent
devrair recevoir :
[
{ name: 'o.nocent', accept: true },
{ name: 'd.gillard', accept: false },
{ name: 'f.blanchard', accept: false }
]
Côté client
Nous allons modifier l'affichage de la liste des utilisateurs connectés afin d'y ajouter un switch qui permettra de bloquer ou autoriser un utilisateur.
Exercice
Modifiez le code en charge de l'affichage des utilisateurs afin :
- d'ajouter un switch pour chaque utilisateur
-
de fixer l'état du switch et la couleur du texte en fonction du
paramètre
accept
-
d'y associer un écouteur d'événement de type
change
qui enverra un événement de type>block
ou>accept
en fonction de l'état du switch (propriétéchecked
)
Côté serveur
Lors de la réception d'un événement de type >block
ou
>accept
, le serveur doit mettre à jour l'objet
acceptMessagesBy
.
Exercice
Écrivez deux écouteurs d'événement pour l'objet socket
afin
de modifier le tableau acceptMessagesBy[nickname]
où
nickname
correspond au paramètre de l'événement envoyé par le
client.
Enfin, l'envoi des messages et des images (publics et privés) depuis le serveur
doit être modifié de façon à ce que seuls les utilisateurs listés dans
acceptMessagesBy[sender]
ne soient destinataires de l'événement.
Exercice
Modifiez le code des écouteurs d'événement de type >message
,
>image
, >private
et >private-image
afin de filtrer l'envoi des messages depuis le serveur.
Et après ?
Félicitations, vous avez réalisé avec succès toutes les étapes de la conception d'un serveur de chat. Maintenant, vous êtes libres d'y ajouter vos propres fonctionnalités : soyes créatifs !