2.7 Obsługa rostera

W tym rozdziale omówimy sobie podstawowe metody obsługi rostera, naszej listy kontaktów, przechowywanej na serwerze.

W następnym rozdziale omówimy integracje rostera z subskrypcją, przedstawimy procesy zachodzące w rosterze w czasie zarządzania subskrypcją.

2.7.1 Pobieranie rostera

Po zalogowaniu powinniśmy pobrać swoją listę kontaktów. Dokonujemy tego wysyłając do serwera zapytanie z prośbą o przesłanie rostera:

<iq type="get" id="GetRoster">
    <query xmlns="jabber:iq:roster"></query>
</iq>

W odpowiedzi serwer zwraca nam dane, o które prosiliśmy:

<iq type="result" id="GetRoster">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom@tlen.pl" name="MalCom"
              subscription="both">
            <group>Kontakty</group>
        </item>
        <item jid="malcom21@tlen.pl" name="malcom21"
              subscription="none">
            <group>Kontakty</group>
        </item>
        <item jid="david@tlen.pl" name="Dawid"
              subscription="to">
            <group>Znajomi</group>
        </item>
        <item jid="contact@tlen.pl" name="ktos"
              subscription="none" ask="subscribe"/>
    </query>
</iq>

Lista kontaktów znajduje się pomiędzy tagami <query></query>. Każdy kontakt reprezentowany jest przez osobny tag <item/>.
Atrybut jid jest identyfikatorem tlenowym danego kontaktu, name określa nazwę kontaktu na liście, a subscription rodzaj subskrypcji, o której już pisaliśmy w poprzednim rozdziale. Parametr ask mówi nam, że oczekujemy na odpowiedź wysłanej (kiedyś) prośby o subskrypcje (autoryzacje).
Jeśli dany kontakt przypisany jest do jakieś grupy na liście kontaktów to <group></group> definiuje tą grupę. W przeciwnym wypadku tag ten jest pomijany.

2.7.2 Dodawanie pozycji

Aby dodać do naszej książki kontaktowej użytkownika należy wysłać serwerowi odpowiedni pakiet z danymi o dodawanym kontakcie:

<iq type="set">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom@tlen.pl" name="MalCom">
            <group>Kontakty</group>
        </item>
    </query>
</iq>

Myślę, że opis nie jest wymagany, znaczenie poszczególnych elementów i atrybutów jest identyczne jak w pakiecie z danymi naszego rostera.

Odpowiedz serwera na dodanie nowego kontaktu:

<iq type="set">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom@tlen.pl" name="MalCom"
              subscription="none">
            <group>Kontakty</group>
        </item>
    </query>
</iq>

Opis nie jest wymagany, jedynie może zastanawiać występujący podwójnie tag <group></group>, prawdopodobnie jest błąd serwera tlenu, który do tej pory nie został usunięty. Bo jak dobrze pamiętam, w jabberze podwójny tag występował tylko przy aktualizacji.

2.7.3 Aktualizacja pozycji

Przy aktualizacji kontaktu używane są identyczne pakiety, co przy dodawaniu. Po prostu dane "pola" wypełniamy nowymi informacjami i wysyłamy do serwera:

<iq type="set">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom@tlen.pl" subscription="both"
              name="malcomus">
            <group>Kontakty</group>
        </item>
    </query>
</iq>

Atrybuty związane z subskrypcją można w zapytaniu pominąć. Tak samo pozycje, które nie chcemy aktualizować, zmieniać.

Reakcją serwera na wysłanie powyższego pakietu jest następującą odpowiedź:

<iq type="set">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom@tlen.pl" subscription="both"
              name="malcomus">
            <group>Kontakty</group>
        </item>
    </query>
</iq>

Należy zaznaczyć, że w przypadku, kiedy edytujemy kontakt, który nie znajduje się w naszym rosterze, to zostanie on normalnie dodany.

2.7.4 Usuwanie pozycji

Jeśli chcemy usunąć jakiś kontakt z naszego rostera, wysyłamy do serwera:

<iq type="set">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom@tlen.pl" subscription="remove"/>
    </query>
</iq>

W jid podajemy identyfikator tlenowy użytkownika, którego chcemy usunąć z naszej książki kontaktowej. Jako subscription ustawiamy remove, co oznacza usunięcie.

W odpwiedzi otrzymamy potwierdzenie:

<iq type="set">
    <query xmlns="jabber:iq:roster">
        <item jid="malcom" subscription="remove"/>
    </query>
</iq>

Dziwne, że tutaj, w jid znajduje się sam login bez adresu serwera (@tlen.pl).

Tę stronę ostatnio zmodyfikowano 12 lutego 2007 02:42:34