Topic: Processus d'ajout de Contact... Besoin d'aide

Bonjour, je développe actuellement un module de Chat et de Jeu Online basé sur Jabber dans une application multi-plateformes basé sur XUL.

Pour les Contacts, les conversations, les MUC, les vCard, tout ça c'est Ok ça marche au poil smile


Mon problème, c'est la gestion d'ajout/suppression/demande d'ajout des contacts entre eux...

Je me base sur le site officiel US avec les XEP, tout ça... je pensais avoir compris l'algorithme d'ajout mais j'ai quelques soucis, en fait le mec qui ajoute est en subscription to, et non en both... Du coup, seul celui qui ajoute voit l'état de l'autre mais pas inversement...

Voici en gros ce que j'ai implémenté :

Fonction d'ajout d'un contact

// Ajout du contact dans le Roster
XMPP.send(account,<iq type='set'><query xmlns={ns_roster}><item jid={jid} subscription='both'/></query></iq>);
// On demande au contact s'il accepte qu'on le voit
XMPP.send(account, <presence to={jid} type="subscribe"/>);

Réception de la demande d'ajout  (Réception de subscribe)

// Ajout du contact dans le Roster
XMPP.send(account,<iq type='set'><query xmlns={ns_roster}><item jid={jid} subscription='both'/></query></iq>);
// On informe le contact qu'on l'autorise à voir notre présence
XMPP.send(account, <presence to={jid} type="subscribed"/>);

Réception de la confirmation d'ajout (Réception de subscribed)

// On informe le contact qu'on l'autorise à voir notre présence
XMPP.send(account, <presence to={jid} type="subscribed"/>);

Voilà, je n'ai mis que le cas où la demande d'ajout est positive...

Le problème étant que si ça suit cette procédure, à la fin le JID 1 voit le 2 car il est en subscription to mais le JID 2 ne voit pas celui qui l'a ajouté, forcément, car il faudrait une subscription both


Est-ce que je fais une erreur quelque part ?

Merci d'avance.

Re: Processus d'ajout de Contact... Besoin d'aide

Il faut que le client qui reçoit la demande de souscription en fasse une aussi de son coté, par contre attention aux boucles infinis, il faut le faire seulement si on a pas déjà souscrit.

3 (edited by Bismut 22-07-2008 11:58:16)

Re: Processus d'ajout de Contact... Besoin d'aide

Ah voilà, c'est ça... J'avais envisagé de balancer un subscribe quand on le reçoit mais je me suis dit que ça allait faire une boucle infinie car si on en renvoie une à chaque fois qu'on en reçoit une, bah ça ne s'arrête jamais...

Peux-tu me dire comment l'éviter ? Quel info. récupérer pour éviter cette boucle infinie ?

Re: Processus d'ajout de Contact... Besoin d'aide

Suffit que tu regardes dans le roster le champ subscription, si il est à both ou à to tu renvoies pas de subscribe.

Re: Processus d'ajout de Contact... Besoin d'aide

Pas bête, effectivement... Ah lala, je sens qu'il va falloir que je revoie ma gestion du Roster moi, je l'ai codé à la va-vite sans penser à une gestion "dynamique" du bouzin... ^^"

Merci du tuyau.

Re: Processus d'ajout de Contact... Besoin d'aide

Question bête, pourquoi ne pas utiliser une bibliothèque déjà toute faite pour XMPP du genre xmpp4moz (http://dev.hyperstruct.net/xmpp4moz) ?

Re: Processus d'ajout de Contact... Besoin d'aide

Mais c'est ce que j'utilise... smile

Mais le gestion des contacts, du Roster, tout ça... c'est pas automatique.

Même au niveau de Sameplace (projet back-end de Massimiliano), c'est pas développé au max. Par exemple, Sameplace ne gère pas le changement d'avatar de la vCard, j'ai dû le gérer moi-même.

En fait, X4M permet d'envoyer et recevoir des messages, d'être à l'écoute de ce qui se passe, mais c'est pas vraiment tout mâché... ou alors je ne sais pas l'utiliser XD