Roster Management

Il Roster dovrà essere suddiviso in due gruppi OTHERS(“others”) e VERIFIED(“verified”) e ogni elemento del Roster dovrà necessariamente contenere l’attributo name e il jid di riferimento.

Esempio:

<item subscription="both" name="Mario Rossi" jid="00393471111111@domain">
    <group>verified</group>
</item>
  • Il gruppo OTHERS rappresenta tutti i membri che non sono ancora registrati nella chat.

  • Il gruppo VERIFIED rappresenta tutti i membri registrati nella chat e visibili nella rubrica dell’applicazione.

Per prima cosa il client richiede il Roster e carica la rubrica del telefono per effettuare una diff tra Roster e Rubrica; il client invierà un messaggio XMPP al buddy xmpp_service dopo l’esito della diff.

Il messaggio Add To Roster avrà nel payload la lista dei membri:

  • Senza un gruppo

  • Senza name

  • Con un name diverso da quello presente nel Roster

  • Presenti in Rubrica ma non presenti nel Roster

  • Con gruppo OTHERS sul Roster ma subscription diversa da none

<message to="xmpp_service@monksoftware.it" id="1486028547270039399072925" type="chat">
    <body />
    <x xmlns="jabber:x:oob">
        <type>cmd_add_to_roster</type>
        <payload>
             {
                "channelUsers": [
                    {
                       "name": "Mario Rossi",
                       "address": "00393471111111"
                    },
                    {
                       "name": "Luca Rossi",
                       "address": "00393472222222"
                    }
                ]
             }
        </payload>
    </x>
</message>

Add Roster

Alla ricezione del messaggio Add To Roster il buddy farà queste operazioni per ogni membro ricevuto:

  • Se non esiste nel Roster lo aggiunge e lo assegna al gruppo VERIFIED se è registrato alla chat oppure al gruppo OTHERS impostando come name il nome ricevuto

  • Se esiste già nel Roster verifica se ha un gruppo o meno, in entrambi i casi lo assegna al gruppo VERIFIED se è registrato alla chat oppure al gruppo OTHERS

  • Se esiste già nel Roster verifica se il nome ricevuto è diverso da quello presente nel Roster, se dovesse essere diverso aggiorna il name

Subscription

Il client per tutti i membri del Roster presenti nel gruppo VERIFIED con subscription diversa da both e da remove e con nessuna subscription in pending (ask=’subscribe’) manda una presence subscribe.