Topic: Recevoir les derniers messages recus à chaque nouvelle connexions

Bonjour à tous,

Je souhaitais savoir s'il existait un module pour ejabberd capable de renvoyer pour chaque ressource se connectant les X derniers messages reçus (offline ou online).

Sinon dans la doc de ejabberd j'ai vu que l'on pouvait se hooker sur des fonctions internes : http://www.process-one.net/en/wiki/ejab … and_hooks/

Une première implémentation naïve serait de stocker tous les messages avec un filter. Mais quelle fonction utilisée pour renvoyer les X derniers messages lorsqu'une ressource se connecte ?

Etant novice en Erlang et ejabberd, l'avis de personnes expérimentées m'intéressent,

Merci,
Alexandre

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

Pour moi, ce n'est pas au serveur de gérer ça. Pas comme ça en tout cas. Mais plutôt au client, qui devrait de lui même afficher ces messages directement.

Et si la personne utilise plusieurs clients, les clients devront gérer la XEP 136 http://xmpp.org/extensions/xep-0136.html

Il se trouve que gajim la gère, et qu'il affiche déjà de lui même d'anciens messages quand on ouvre une fenêtre de discussion.

Il se trouve que ejabberd, même si aux dernières nouvelles ce n'était pas parfait, la gère aussi.

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

En effet, il s'agit de mod_archive : http://www.ejabberd.im/mod_archive

xmpp:nyco@jabber.fr

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

J'dis ça, j'dis rien, mais me semble que celui là est a éviter. Il vaudrait mieux aller voir http://www.ndl.kiev.ua/content/modarchive2-status

D'ailleurs la page que pointes me donnes raison, parce qu'elle dit d'aller voir du côté de mod_archive_odbc qui est l'ancien nom de mod_archive2.

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

Oui, si tu veux il y a aussi mod_log_db qui est tout de même _beaucoup_ plus simple, mais sans doute à adapter, et qui peut gêner les utilisateurs de chiffrement et qui veulent régler finement les préférences de "privacité".

xmpp:nyco@jabber.fr

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

Si je me fie à http://www.ejabberd.im/mod_logdb (j'pense que tu parlais de lui, à moins qu'il n'y ait un vrai « mod_log_db »), mod_logdb ne permet qu'aux admins de jouer les BigBrother. Les utilisateurs n'ont pas accès aux messages enregistrés. Du coup, j'vois pas trop en quoi c'est beaucoup plus simple.

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

Jorge

xmpp:nyco@jabber.fr

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

De ce que je peux lire sur http://www.ejabberd.im/jorge , ça ne répond pas au besoin de alexandre.garino. De ce qu'il a dit, il veut que la personne puisse le faire depuis son client xmpp et pas en passant par un client web à côté. Il veut aussi que ça soit automatique.

Du coup, je reste sur la solution que je lui ai proposé avec la XEP 136 qui répond à la première moitié du problème, à savoir faire en sorte que tous les clients utilisées par un utilisateur soient à jour au niveau des messages échangés. L'autre partie du problème étant réglé par des clients comme gajim (et d'autres) qui affichent les X derniers messages échangés.

Et encore, si les utilisateurs n'utilisent qu'un seul client comme gajim, il n'y a même pas besoin de la XEP 136.

Re: Recevoir les derniers messages recus à chaque nouvelle connexions

Merci pour toutes vos réponses.

Ejabberd va être utilisé comme brique technique d'un ensemble et son utilisation va être détournée (passerelle -- XMPP over BOSH -- pour envoyer des messages d'un topic JMS sur HTTP). C'est évident que dans un contexte d'IM mon problème n'a surement pas de sens.

Pourquoi le module offline ne convient pas ? Car nous avons remarqué que le serveur met du temps à se rendre compte qu'un client a été déconnecté via XMPP over BOSH. Et si un message est envoyé pendant ce laps de temps, le client ne le reçoit pas et le serveur ne le stock pas comme un message offline il est donc perdu. Pour une application qui attend un événement pour synchroniser son état, ça peut être très gênant et donner une mauvaise expérience à l'utilisateur.

En renvoyant les messages offline ou online, on limite ce risque.

Je vais donc regardé du coté du code source de archive2.

Pour stocker les stanza de type messages je vais regarder du coté des hooks :

- offline_message_hook
- filter_packet
- user_send_packet

Pour renvoyer les messages lorsque une ressource se connecte :

- resend_offline_messages_hook

Et j'ai trouvé un bon guide pour commencer le développement d'un module qui couvre l'utilisation de mnesia dont je vais pouvoir me servir pour stocker les X derniers messages des clients :

- http://metajack.wordpress.com/2008/08/2 … ce-storms/

Si vous pensez qu'il y a un moyen plus simple de résoudre ce problème, n'hésitez pas.

Merci,
Alexandre