lisa-api
Version:
Lisa Javascript XMPP Library =============
136 lines (106 loc) • 3.61 kB
JavaScript
/*
* A very simple Lisa XMPP client.
*/
var conn; // Connection object
var model; // Datamodel object
function log(msg) {
$('#eventlog').append(msg + "<br/>");
}
$(document).ready(function() {
// Create the global connection object.
conn = new Lisa.Connection();
// Uncomment the next line to log every XMPP packet to the console.
//conn.log_xmpp = true;
// Connect
conn.connect(server, jid, password);
/*
* When we're connected, listening for changes, and the data-model
* has been downloaded, call modelReady() with the new data-model.
*
* getModel() returns a JQuery.deferred.
* See: http://api.jquery.com/category/deferred-object/
* for more information.
*/
conn.getModel().then(modelReady, function(msg) {
alert('Could not initialize: ' + msg); });
// Additionally, write logging messages from the library to the console, and display status changes.
conn.logging.setCallback(function(msg) {
console.log(msg);
});
conn.logging.setStatusCallback(function(msg) {
$('#status').text(msg);
});
});
function modelReady(newModel) {
// initialize the global datamodel object.
model = newModel;
// Listen for changes in all users and queues.
listenToAllUsers(model);
listenToAllQueues(model);
/*
* When new users or queues are added, make sure to listen to those as well.
* We do this by listening for changes on the user-list and the queue-list.
* Whenever either changes, we re-subscribe to changes for every elemnt in the queue.
*/
model.userListObservable.addObserver(function() {
listenToAllUsers(model);
});
model.queueListObservable.addObserver(function() {
listenToAllQueues(model);
});
}
function listenToAllUsers(model) {
for (userId in model.users) {
// the model.users array contains all users, keyed by user-id.
var user = model.users[userId];
// Then, subscribe or re-subscribe to changes on the user.
user.observable.addObserver(handleUserChange);
}
}
function listenToAllQueues(model) {
for (queueId in model.queues) {
// the model.users array contains all users, keyed by user-id.
var queue = model.queues[queueId];
// Then, subscribe or re-subscribe to changes on the user.
queue.observable.addObserver(handleQueueChange);
}
}
function handleUserChange(user, eventType, item) {
log("*** user " + user + " received " + eventType + " event for " + item);
log("- queues:")
if (_.size(user.queues) == 0) {
log("None");
} else for (queueId in user.queues) {
var queue = user.queues[queueId];
log(queue);
}
log("- calls:")
if (_.size(user.calls) == 0) {
log("None");
} else for (callId in user.calls) {
var call = user.calls[callId];
log(call);
}
log("<br/>");
}
function handleQueueChange(queue, eventType, item) {
if ((eventType == Lisa.Queue.EventTypes.CallAdded) && (queue.name == "Spoed")) {
$("body").css("background-color", "red");
}
log("### queue " + queue + " received " + eventType + " for " + item);
log("- users:")
if (_.size(queue.users) == 0) {
log("None");
} else for (userId in queue.users) {
var user = queue.users[userId];
log(user);
}
log("- calls:")
if (_.size(queue.calls) == 0) {
log("None");
} else for (callId in queue.calls) {
var call = queue.calls[callId];
log(call);
}
log("<br/>");
}