Jabber se nejcasteji pouziva pro komunikaci uzivatelu v realnem case. Velmi dobre se take da pouzit jako rychly zpusob pro zobrazovani informaci uzivatelum. Informacni text se napise do statove zpravy a uzivatele u kontaktu ve svem klientovy zpravu uvidi. Asi nejcasteji se takto zobrazuje aktualni pocasi:
Ukazka vyuziva knihovnu Smack API od Ignite Realtime. Zdrojovy kod ke stazeni (zip).
Napsat jednoducheho klienta v Jave, ktery bude pouze kazdy X sekund aktualizovat svuj status je otazka maximalne 5 minut. Nejde sice o nejoptimalnejsi reseni, ale funguje. Klient nebude reagovat na zpravy od uzivatelu (v pripade potreby neni problem dopsat). Po pripojeni na server nastavi svoji prezdivku a vCard, nastavi stav na dostupny a nastavi automaticke potvrzovani zadosti o pridani do kontaktu. Pote do nekonecna aktualizuje status.
Uplny zaklad je na nejakych 15 radku:
– pouze ukazka jednoduchosti. Thread.sleep na konci je pekna prasarna.
Lepsi varianta vypada nasledovne:
Aktualizace statusu bezi v samostatnem vlakne.
Status je mozne sledovat i na mobilu v Google Talk aplikaci.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import org.jivesoftware.smack.Connection; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smackx.packet.Nick; import org.jivesoftware.smackx.packet.VCard; public class Klient { private final static String SERVER = "jabber.cz"; private final static String JMENO = "prihlasovaci jmeno"; private final static String HESLO = "a heslo..."; private final static String NICK = "Pokus 123 :-)"; private final static int STATUS_UPDATE_INTERVAL = 5; // [s] public static boolean aktualizovat = true; private static Connection con; private static Presence pr; public static void main(String[] args) throws XMPPException, InterruptedException { // pripojeni na server con = new XMPPConnection(SERVER); con.connect(); con.login(JMENO, HESLO); // kazdy si muze nas jabber ucet pridat do svych kontaktu, automaticky // obdrzi potvrzeni Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all); // dostupnost - dostupny pr = new Presence(Presence.Type.available); // nastaveni prezdivky a vCard Nick nick = new Nick(NICK); VCard vCard = new VCard(); vCard.setJabberId(JMENO + "@" + SERVER); vCard.setNickName(NICK); vCard.save(con); class Status implements Runnable { @Override public void run() { while (aktualizovat) { Calendar cal = new GregorianCalendar(); SimpleDateFormat sdf = new SimpleDateFormat( "HH:mm:ss dd.MM.yyyy"); aktulizujStatus("Právě je: " + sdf.format(cal.getTime())); try { Thread.sleep(STATUS_UPDATE_INTERVAL * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } // nove vlakno bude aktualizovat status Status st = new Status(); Thread vlakno = new Thread(st); vlakno.start(); System.out.println("XMPP klient byl uspesne spusten."); vlakno.join(); // ceka na ukonceni vlakna // (ktere v tomto pripade nikdy nenastane) con.disconnect(); } public static void aktulizujStatus(String status) { pr.setStatus(status); con.sendPacket(pr); } } |
Ukazka vyuziva knihovnu Smack API od Ignite Realtime. Zdrojovy kod ke stazeni (zip).