PubNub Presenza in JavaScript

Esempio

La presenza funziona inviando messaggi quando un utente si unisce, esce o esce da un determinato canale. Puoi ascoltare questi messaggi per tenere traccia di chi si trova in un canale e da quanto tempo hanno fatto qualcosa.

Innanzitutto, assicurati che ciascun utente sia un UUID. Imposta questo quando inizializzi PubNub:

var pubnub = PUBNUB({
     publish_key: 'my_pub_key',
     subscribe_key: 'my_sub_key',
     uuid: '1234_some_uuid'
 });

Ora quando ti connetti a un canale, aggiungi un listener extra per join eventi.

pubnub.subscribe({
    channel: "channel-1",
    message: function(m){console.log(m)}
    presence: onPresenceEvent,
});

onPresenceEvent = function(message, envelope, channel){
    if (!message.action) {
        // presence interval mode happens
        // when occupancy > presence announce max
        // there is no action key
        console.log("Presence Interval Mode: occupancy = " + m.occupancy);
        return;
    }

    console.log(
        "Action:    " + message.action + "\n" +
        "UUID:      " + message.uuid + "\n" +
        "Channel:   " + JSON.stringify(channel) + "\n" +
        "Occupancy: " + message.occupancy + "\n" +
        "Timestamp: " + message.timestamp);

    else if (m.action == 'join') {
        // new subscriber to channel
        // add the user to your buddy list
    }
    else if (m.action == 'leave') {
        // subscriber explicitly unsubscribed channel
        // remove user from your buddy list
    }
    else if (m.action == 'timeout') {
        // subscriber implicitly unsubscribed channel (did not unsubscribe)
        // remove user from your buddy list        
    }
    else if (m.action == 'state-change') {
        // subscriber changed state
        // update the attributes about the user in the buddy list
        // i.e. - is typing, online status, etc.
        console.log("State Data: " + JSON.stringify(message.data));
    }
};

L'oggetto messaggio inviato al callback presence includerà l'azione intrapresa (join, leave, timeout o state-change) e l'UUID dell'utente che ha eseguito l'azione, oltre a timestamp e altri metadati.

Quando viene impostato lo state-change viene inviato un evento di state-change che includerà il nuovo stato nella chiave data chiave del message .

Nota : se Access Manager è abilitato, è necessario assicurarsi che le concessioni coprano sia il canale normale che il canale di presenza. Altrimenti, quando tenti di iscriverti al canale con una callback di presenza, l'SDK ti iscriverà anche al canale di presenza che fallirà se non hai applicato le concessioni. Il nome del canale di presenza è il nome del canale regolare con un suffisso "-pnpres"; il che significa che un canale chiamato "pubnub-sensor-array" avrà un canale di presenza chiamato "pubnub-sensor-array-pnpres". Vedere gli esempi di Access Manager per ulteriori informazioni.