IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
FAQ Qt FAQ Qt Creator FAQ PyQt & PySide

FAQ Qt

FAQ QtConsultez toutes les FAQ

Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 15 juin 2021 

 
OuvrirSommaireBibliothèques complémentairesQXmpp

La première chose à faire est de se connecter comme expliqué dans la Q/R "Comment réaliser une connexion/déconnexion au serveur de messagerie ?" de cette FAQ.

Toutes les informations sur le roster courant sont contenues dans le rosterManager de l'objet client et vous n'avez donc rien de particulier à faire pour le récupérer si ce n'est d'appeler cet objet rosterManager.

Il faut savoir que comme tout protocole utilisant le réseau, la récupération des données n'est pas instantanée. Le signal suivant peut être utilisé pour déclencher le traitement du roster :

 
Sélectionnez
void rosterReceived()

de cette manière :

 
Sélectionnez
connect(&this->rosterManager(), SIGNAL(rosterReceived()), SLOT(rosterReceived()));

Le slot rosterReceived étant un slot personnalisé dans lequel nous allons récupérer les informations du roster. Pour récupérer tous les JID contenus dans le roster et les afficher nous procéderons comme ceci :

 
Sélectionnez
QStringList list = rosterManager().getRosterBareJids();
for(int i = 0; i < list.size(); ++i) {
     qDebug() << list.at(i);
}

Vous ne récupérerez grâce à ce code que les JID (donc dans la majorité des cas l'adresse mail de l'"ami"), dépourvus de toute ressource, dans une liste de QString que vous pouvez traiter selon vos besoins.

Créé le 7 mai 2012  par Francis Genet

Lien : Qu'est-ce qu'un roster ?
Lien : Comment réaliser une connexion/déconnexion au serveur de messagerie ?

Un roster représente l'ensemble des utilisateurs dans la liste d'amis d'un utilisateur avec qui celui-ci va pouvoir parler/échanger des fichiers ainsi que toutes les informations qui les caractérisent comme leur statut courant, leur avatar, leur message personnalisé, leur pseudo ou encore leur adresse mail par exemple.

Le récupérer vous est donc obligatoire si vous souhaitez réaliser un client de messagerie digne de ce nom. C'est à partir du roster que vous recevrez toutes les informations nécessaires au dialogue.

Quelques aspects techniques

La première étape de la récupération du roster est la requête au serveur qui ressemble à ceci :

 
Sélectionnez
<iq id="qxmpp1" from="dvp.com@gmail.com/QXmpp3CCECA53" type="get"><query xmlns="jabber:iq:roster"/></iq>
  • "qxmpp1" correspond à un id unique pouvant être attribué de manière arbitraire. Vous pouvez tout à fait mettre 1, 2, 3... ou tartenpion1, tartenpion2, etc. du moment que l'id reste unique pour chaque requête ;
  • l'adresse dans l'attribut "from" correspond ni plus ni moins à l'adresse du client suivi de sa ressource (attribuée par le serveur) ;
  • <query xmlns="jabber:iq:roster"/> correspond à la requête en elle même de récupération du roster.

La réponse du serveur est de type :

 
Sélectionnez
<iq to="dvp.com@gmail.com/QXmpp3CCECA53" id="qxmpp1" type="result">
    <query xmlns="jabber:iq:roster">
        <item jid="dvp2.com@gmail.com" subscription="both"/>
        <item jid="dvp3.com@gmail.com" subscription="both"/>
        ...
    </query>
</iq>
  • le JID correspond à l'adresse d'un des contacts dans le roster ;
  • l'attribut "subscription" indique si l'inscription dans le roster est respective ou non, c'est-à-dire si les deux parties (le client courant et son "ami") sont présentes dans le roster l'une de l'autre ;
  • le reste (qui entoure les items) correspond à la structure de la réponse.
Créé le 7 mai 2012  par Francis Genet

Lien : Comment récupérer le roster d'un utilisateur ?

Avant toute opération/requête auprès du serveur de messagerie, il vous faudra vous connecter à celui-ci.

 
Sélectionnez
#include "QXmppClient.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // Création de l'objet client.
    QXmppClient client;
    // Connexion à proprement parler.
    client.connectToServer("host", "login", "password", "domain");

    return a.exec();
}

Cette forme est la plus simple. Il existe au total deux autres surcharges de cette fonction mais celle-ci est celle que vous utiliserez le plus. Passons en revue les différents paramètres :

  • "host" correspond à l'adresse du serveur hôte ;
  • "login" correspond au nom d'utilisateur. Par exemple, sur un compte gmail de type nom.prenom@gmail.com, ce paramètre équivaut à "nom.prenom" ;
  • "password" correspond au mot de passe de connexion du compte ;
  • "domain" correspond au domaine. Cela correspond la plupart du temps à la partie à droite de l'arobase (@) dans l'adresse de messagerie.

Le port par défaut qui est utilisé est le port 5222, si vous souhaitez le changer, il vous suffit de rajouter un cinquième paramètre. Enfin, il est possible d'en rajouter un sixième qui correspond au statut initial, il vous faudra pour cela créer un objet de type QXmppPresence.

Lorsque le client est connecté, le signal connected() est émis.

De même, si vous souhaitez déconnecter votre client, utilisez le code suivant :

 
Sélectionnez
client.disconnectFromServer(); // Depuis la révision r585
client.disconnect(); // Avant la révision r585

Lorsque le client est déconnecté, le signal disconnected() est émis.

Créé le 7 mai 2012  par Francis Genet

QXmpp intègre un système de log complet et facile à mettre en place :

 
Sélectionnez
QXmppLogger::getLogger()->setLoggingType(QXmppLogger::StdoutLogging);

C'est la seule ligne nécessaire. Il vous faudra la placer avant de connecter le client.

Plusieurs choses à savoir sur les possibilités offertes par QXmpp. Il vous est possible de capturer les logs de trois manières différentes :

  1. QXmppLogger::StdoutLogging affichera les logs sur la sortie standard ;
  2. QXmppLogger::FileLogging enregistrera tous les logs dans un fichier (par défaut "QXmppClientLog.log") ;
  3. QXmppLogger::SignalLogging vous permettra de récupérer les logs grâce à des signaux/slots.

Dans le cas d'un log via fichier, vous pouvez utiliser

 
Sélectionnez
void setLogFilePath (const QString &path)

pour définir un emplacement personnalisé.

De plus, si vous souhaitez utiliser la dernière possibilité, la classe QXmppLogger fournit le signal suivant :

 
Sélectionnez
void message (QXmppLogger::MessageType type, const QString &text)

L'énumération MessageType :

 
Sélectionnez
enum MessageType
{
        DebugMessage = 0,    // Message de type "débogage"
        InformationMessage,  // Message de type "information"
        WarningMessage,      // Message de type "avertissement"
        ReceivedMessage,     // Message reçu du serveur
        SentMessage,          // Message envoyé au serveur
};
Créé le 7 mai 2012  par Francis Genet

XMPP, pour "Extensible Messaging and Presence Protocol" ou encore, en français, "Protocole extensible de présence et de messagerie", est un protocole de messagerie instantanée qui est notamment utilisé sur le réseau Jabber ou encore par Facebook, Apple, Google... Il permet non seulement les échanges de messages mais également le transfert de fichiers, la VoIP (téléphonie sur Internet comme Skype) ou encore la visioconférence, entre autres.

QXmpp est une bibliothèque très simple d'utilisation basée sur Qt (multiplateforme) qui permet de créer des clients basés sur le protocole XMPP. Elle vous permettra à peu près toutes les actions supportées par le protocole.

Créé le 7 mai 2012  par Francis Genet

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 - 2017 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.