Hlavní navigace

Jabber - komunikačný protokol (4)

Peter Sivák 16. 8. 2004

Viete, čo je presentita? Je to entita, ktorá poskytuje informáciu o svojej dostupnosti (presence) prezenčnej službe. Môžu to byť ľudia, ktorí sú prihlásení pomocou IM klienta. Prostredníctvom neho zverejňujú informáciu o svojej dostupnosti - napr. či sedia v práci pri počítači (...online), alebo sa vyhrievajú na pláži (...dnd). Presentitou však možno nazvať aj veľa iných vecí.

Presentita je entita, ktorá zverejňuje svoju dostupnosť. V sieťovej terminológii nazývame entitou všetko, čo sa dá adresovať (teda má adresu). V kontexte komunikačnej technológie je dostupnosť vo svojej podstate logický indikátor pripravenosti na komunikáciu. Čo, prípadne kto môže komunikovať po sieti? Samozrejme sú to ľudia, ale nielen oni. Sú to tiež roBoty, servery, chatovacie miestnosti, služby, routre, firewally, brány a rôzne iné zariadenia, ktoré môžu byť pripojené na sieť. Beží firewall, router, alebo web server? Je roBot schopný odpovedať? Je v kávovare káva? (predzvesť Coffee mini-howto pre XMPP :) To všetko je dostupnosť. Dostupnosť entity je dôležitá aj pre server. Ak je entita nedostupná, tak všetky správy pre ňu zatiaľ čakajú na serveri.

Aj parkovacie miesto môže byť presentitou. Stačí ho vybaviť senzorom a programom sprostredkovať informáciu, či je miesto voľné alebo obsadené. Podobným spôsobom môžu byť riešené bezpečnostné systémy budov.

Mobilní operátori prevádzkujú tzv. Home Location Register – databázu s informáciami o dostupnosti a umiestnení mobilných telefónov svojich zákazníkov. Bolo by zaujímavé sledovať vývoj mobilných telefónov využívajúcich informácie o dostupnosti. Ešte pred vytočením čísla by sme videli, či je iný používateľ mobilnej siete dostupný, prípadne či si želá byť rušený. Ale späť do reality! Pozrime sa ako situáciu rieši XMPP.

Z názvu protokolu XMPP (eXtensible Messaging and Presence Protokol) vidieť, že je to protokol nielen o posielaní správ, ale aj o sprostredkovávaní infromácii o dostupnosti. XMPP posiela informácie o dostupnosti v Presence paketoch. Tie obsahujú informáciu spracovateľnú počítačmi (napr. online, away) a informáciu pre ľudí. Informácia pre ľudí môže byť akýkoľvek text.

XMPP využíva na zverejňovanie dostupnosti návrhový vzor pozorovateľ (observer, publish/subscribe). Entity sa prihlasujú/od­hlasujú na odber správ o zmene dostupnosti inej entity. Ak entita zmení svoj stav (dostupnosť), tak pošle Presence paket serveru a ten rozošle Presence pakety všetkým entitám, ktoré sú prihlásené na odber týchto správ (sú v rosteri entity). Entita sa môže dostať do rostera inej entity len s jej dovolením.

Dostupnosť môže byť online, alebo offline (available/una­vailable). Ak je entita online, tak je dostupná aj podrobnejšia informácia (away, do not disturb, …) Zmenu dostupnosti JIDu docielime v XMPP odoslaním paketu typu Presence. V Smacku to znamená vytvorenie objektu triedy Presence a odovzdanie vytvoreného objektu metóde sendPacket():

// Vytvorenie paketu a jeho nastavenie na "nedostupný"
Presence presence = new Presence(Presence.Type.UNAVAILABLE);
// Infomácia pre ľudí.
presence.setStatus("Čítam Root.cz");
// Odoslanie paketu.
// con je vytvorený objekt triedy XMPPConnection alebo SSLXMPPConnection
con.sendPacket(presence); 

V prípade, že nastavíme dostupnosť na Presence.Type­.AVAILABLE, tak môžeme upresniť informáciu o dostupnosti na­pr.:

presence.setMode(Presence.Mode.DO_NOT_DISTURB);

Ďalšie možnosti sú:

  • Presence.Mode­.AVAILABLE
  • Presence.Mode.AWAY
  • Presence.Mode.CHAT
  • Presence.Mode­.EXTENDED_AWAY
  • Presence.Mode­.INVISIBLE

Roster

Roster je zoznam kontaktov, ktorý nám umožňuje zisťovať informáciu o dostupnosti iných entít. Najmä v iných IM službách sa môžeme stretnúť s názvami ako contact list, buddy list a pod.

Kontakty sú v rosteri organizované do skupín, ktorým môžeme priradiť mená. Každý kontakt môže patriť žiadnej, jednej, alebo viacerým skupinám. Každá položka rosteru obsahuje JID entity, meno, ktoré jej môžeme ľubovolne priradiť a zoznam skupín, do ktorých patrí. Roster môžeme získať takto:

Roster roster = con.getRoster();

Zrejme najdôležitejšou metódou triedy Roster je metóda umožňujúca získať mená všetkých kontaktov. Nasleduje príklad, ktorý ich vypíše na štandartný výstup.

for (Iterator i=roster.getEntries(); i.hasNext(); ) {
  System.out.println(i.next());

} 

Paket Presence o konkrétnom kontakte v rosteri získame metódou

Presence presence = roster.getPresence("meno");

a následne informáciu o dostupnosti metódami:

Presence.Mode Presence.getMode();
Presence.Type Presence.getType();

V prípade, že getPresence() nenájde kontakt so zadaným menom, vráti null.

Prebrali sme nastavovanie a získavanie informácii o dostupnosti entity. Ešte nás čaká obsluha udalosti vyvolanej zmenou dostupnosti niektorej entity alebo zmenou v samotnom rosteri. To docielime registrovaním metód na obsluhu tých udalostí.

roster.addRosterListener(new RosterListener() {
  (public void rosterModified() {
    // ...
  }

  (public void presenceChanged(String user) {
    // ...
  }
}); 

Tu rozprávanie o presentitách skončíme. O týždeň budeme pokračovať opisom prenášania informácii v IQ paketoch. To sa nám zíde pri vytváraní webových služieb.

Našli jste v článku chybu?

18. 8. 2004 18:08

Martin Jindra (neregistrovaný)

1) Norma v češtině? Kdepak je? Nějak jsem ji minul.
3) Sorry, nějak jsem zapomněl.
4) >Chcel by som získať programátorov pre XMPP.
Ať se ti to povede.
Právě JEP dělají z Jabberu mocný nástroj a možnost vytvořit si vlastní server, klienta či službu téměř v jakémkoliv programovacím jazyce to celé umocňují.
Možná by se hodílo pouze načrtnou možnosti a později když o to bude zájem tak jít do podrobností.






18. 8. 2004 14:33

Peter Sivák (neregistrovaný)

Ďakujem za kritiku.

1) Malý príklad je v druhej časti. IMHO syntax elementu presence je jednoduchá a nie je o nej vhodné písať siahodlhé články. Obsahuje iba elementy show, status, priority. O všetkých bolo písané.
> Smršť v ietf-xmpp-im
Element presence je tam popísaný na dvoch, troch stranách. Ostatné je len o posielaní tohto elementu a to si myslím, že nie je užitočné popisovať v článkoch (asi stačia príklady v Smacku). IMHO - norma je celkom dobre napísaná. (je v nej aj príklad v čes…



Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Root.cz: Pinebook: linuxový notebook za 89 dolarů

Pinebook: linuxový notebook za 89 dolarů

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Co pomáhá dítěti při zácpě?

Co pomáhá dítěti při zácpě?

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?