jam-cloud/app/assets/javascripts/sessionModel.js

65 lines
1.8 KiB
JavaScript

// The session model contains information about the music
// sessions that the current client has joined.
(function(context,$) {
context.JK = context.JK || {};
var logger = context.JK.logger;
var sessions = {}
sessions.instances = {};
sessions.JoinSession = function(session_id) {
if (sessions.instances[session_id] !== undefined) {
logger.error("ERROR: Joined a session twice: " + session_id);
return;
}
sessions.instances[session_id] = {
id: session_id,
participants: {}
};
};
sessions.LeaveSession = function(session_id) {
if (sessions.instances[session_id] !== undefined) {
delete sessions.instances[session_id];
}
};
sessions.UpdateSessionParticipants = function(session_id, participants) {
var added = [];
var removed = [];
var session = sessions.instances[session_id];
if (session === undefined) {
logger.error("ERROR: Unknown session: " + session_id);
return;
}
var toBeRemoved = $.extend({}, session.participants);
$.each(participants, function (index, participant) {
if (session.participants[participant.client_id] === undefined)
{
session.participants[participant.client_id] = participant;
added.push(participant);
}
else
{
delete toBeRemoved[participant.client_id];
}
});
$.each(toBeRemoved, function(client_id, participant) {
delete session.participants[client_id];
removed.push(participant);
});
return { added: added, removed: removed };
};
context.JK.Sessions = sessions;
})(window,jQuery);