FAQ Qt
FAQ QtConsultez toutes les FAQ
Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 15 juin 2021
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 :
void
rosterReceived()
de cette manière :
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 :
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.
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 :
<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 :
<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.
Avant toute opération/requête auprès du serveur de messagerie, il vous faudra vous connecter à celui-ci.
#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 :
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.
QXmpp intègre un système de log complet et facile à mettre en place :
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 :
- QXmppLogger::StdoutLogging affichera les logs sur la sortie standard ;
- QXmppLogger::FileLogging enregistrera tous les logs dans un fichier (par défaut "QXmppClientLog.log") ;
- 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
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 :
void
message (QXmppLogger
::
MessageType type, const
QString
&
text)
L'énumération MessageType :
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
}
;
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.