címkék

beleszóltak

amik jók

Ricsi megmondja:
java'nother blog

Ebben hiszek:
BMWfanatics.hu

Jabber MySQL auto add contact on register

2009.02.12. 13:15 nullstring

De komoly címe lett ennek a postnak... :D Maga a lényeg nem ennyire komoly. A cégnél belső hálózaton saját jabber szervert használunk, amire minden kolléga fel van regisztrálva. Sok volt már az idétlenkedés, ha jött egy új user, hogy mindenkit hozzáadogatni, nyilvántartani az accountokat stb., ezért áthelyeztük a jabberd-t MySQL alapokra. Ez azért jó, mert egyrészt egyben kapunk egy nyilvántartást is, másrészt lehet hozzá írni jó kis triggert, minek következtében, ha valaki beregisztrál, automatice hozzáadódik mindenki a kontakt listájához, és ugyan ez fordítva.

Egyetlen baj van ezzel, mégpedig az, hogy ha a kontaktok éppen online vannak, mikor hozzá adódnak valakinek a listájához, nem fognak látszani, csak ha kilépnek, majd belépnek. Azt hiszem ennyi kompromisszum belefér :)

Tehát a megoldás ez lett: 

DELIMITER |
CREATE TRIGGER addcontacts AFTER INSERT ON authreg
    FOR EACH ROW BEGIN
    SET @myjid = CONCAT(NEW.username, '@jabber.belsoszerver.loc');
    INSERT INTO `roster-items` (`collection-owner`, jid, name, `to`, `from`, ask)
    SELECT @myjid, CONCAT(`username`, '@jabber.belsoszerver.loc'), `username`, 1, 1, 0 FROM authreg WHERE `username` != NEW.username;
    INSERT INTO `roster-items` (`collection-owner`, jid, name, `to`, `from`, ask)
    SELECT CONCAT(`username`, '@jabber.belsoszerver.loc'), @myjid, NEW.username, 1, 1, 0 FROM authreg WHERE `username` != NEW.username;
    END;
|
DELIMITER;

A fenti trigger akkor hajtódik végre, mikor a jabberd2.authreg táblába új bejegyzés kerül, konkrétan rögtön azt követően. A trigger neve addcontacts lett. Beállítunk egy változót, aminek a neve myjid, az értéke pedig az újonnan beszúrt username összefűzve  a '@jabber.belsoszerver.loc' string-el. Az eredményt hagy ne írjam le :D

Ezután beszúrjuk a roster-items táblába (ami a kapcsolatokat tárolja) az új usert oly módon, hogy leválogatjuk az összes accountot az authreq táblából, természetesen csak azokat, amik nem az új user :) Nekik is concat-oljuk a usernevüket a @jabber.belsoszerver.loc string-el, mert a roster-items táblába már nem szimpla userneveket kell megadni, hanem usereket a hozzájuk tartozó szerverrel együtt. A leválogatott értékek beszúrásra kerülnek, így az új usernek minden már meglévő user bekerül a kontakt listájába.

Fordítva is meg kell tennünk ugyan ezt, hogy mindenki másnak a listájába bekerüljön az új user. Ebben az esetben minden beszúrásnál a leválogatott név lesz (CONCAT-olva) az owner, és az új user (myjid) az új kontakt. Minden irányban azt tettük, hogy beszúrásnál névnek (ami a kontakt listában jelenik meg) a username-eket adtuk meg.

A jabber kontaktlistájának a táblája tehát: authreq
felépítése: collection-owner, jid, name, to, from, ask

a collection-owner természetesen az a user, akihez tartozik az adott bejegyzés/kontakt. A jid maga a kontakt, a name, a kontakt neve, ami megjelenik a user listájában, az ask pedig feltehetően az, hogy nem kell authorizálnia a usernek. a to és a from mezők homályosak, így nem is írnék semmit, nehogy nagy marhaság kerekedjen belőle :D

Elég elnagyolt post lett, de a lényeg kivehető, a kód működik, és legalább le van archiválva nekem is :D

üdv!

u.i.: igen, a DELIMITER | azt jelenti, hogy a mysql ezen karakter mentén értelmezze külön utasításként a beírt dolgokat. Mivel alapértelmezetten ez a ;, de a triggerünk ezt szép számban tartalmazza, más delimiterre lesz szükségünk. Jelen esetben ez a |, amit a trigger hozzáadása után visszaállítunk az alapértelmezett ; karakterre.

Szólj hozzá!

Címkék: tutorial howto jabber mysql munkahely

A bejegyzés trackback címe:

https://nullstring.blog.hu/api/trackback/id/tr46938859

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.



süti beállítások módosítása