WebHU - Programozási kérdések és válaszok

Strophe.js – Hogyan szerezzünk be egy névsort a tagjaival?

A Strophe parancs használatakor:

var iq = $iq({type: 'get'}).c('query', {xmlns: 'jabber:iq:roster'}); 
connection.sendIQ(iq)

Ezt kapom a siker visszahívásaként:

<iq xmlns="jabber:client" xml:lang="pt-br" to="user01@localhost/100164477219111523302818" from="user01@localhost" type="result" id="82480785-c170-48d1-a180-bcadbff957d2:sendIQ">
  <query xmlns="jabber:iq:roster">
    <item subscription="both" jid="user02@localhost">
      <group>Roster01</group>
      <group>Roster02</group>
    </item>
    <item subscription="both" jid="admin@localhost">
      <group>Roster01</group>
      <group>Roster02</group>
    </item>
    <item subscription="both" jid="[email protected]">
      <group>Roster02</group>
    </item>
    <item subscription="both" jid="[email protected]">
      <group>Roster01</group>
    </item>
  </query>
</iq>

Azt szeretném tudni, hogy van-e valamilyen mód a visszahívások csoportosítására a csoportok és tagjai szerint. Ha nem, hogyan tudom ezt megtenni Javascript segítségével. Példák:

  • A 01-es névsorhoz tartozik admin, user02 és grupo01
  • A 02-es névsorhoz tartozik admin, user02 és grupo02

XMPP szerverként az ejabberdot használom, kliensként pedig az Ionic 3-at Strophe-val.

24.01.2018

Válaszok:


1

Javaslom a strophejs-plugin-roster használatát, amely megkönnyíti a dolgokat:

// connect Strophe
connection = new Strophe.Connection(url);
connection.connect(my_jid, my_pwd, onConnect);

...

function onConnect(status) {
    if (status == Strophe.Status.CONNECTED) {
        ...

        // pass connection to roster plugin
        connection.roster.init(connection);
    }
}

Itt van egy függvény, amellyel beépíthető a beépülő modul, az eredmény egy objektumokat tartalmazó JS-tömb (XML helyett...):

function getRoster() {
    connection.roster.get(function (roster) {
        console.log('   >roster:', roster);
        for (var i in roster) {
            console.log('   >buddy '+i+':');
            console.log('       >'+roster[i].name+" ("+roster[i].jid+' -->'+roster[i].subscription);
            console.log('       >', roster[i].groups);
        }
        // get buddies belonging to group1 and group2 (see below)
        console.log('   >roster-group1:', getRosterGroup(roster, 'group1'));
        console.log('   >roster-group2:', getRosterGroup(roster, 'group2'));
    });
}

Az alábbi funkció a barátokat csoport szerint szűri:

function getRosterGroup(roster, group) {
    var reduced = roster.reduce(function(filtered, item) {
        if (item.groups.indexOf(group)!==-1) {
            filtered.push(item);
        }
        return filtered;
    }, []);
    return reduced;
}

Itt van egy működő Plunker: http://plnkr.co/edit/XloJABSGHZvLTp3Js2KI?p=preview

26.01.2018
  • Köszönöm, fantasztikus Plunker! 26.01.2018
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..