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

91 lines
3.0 KiB
JavaScript

/*
Message builder for communicating over the websocket
*/
(function(context, $) {
"use strict";
context.JK = context.JK || {};
var msg = context.JK.MessageType = {
LOGIN : "LOGIN",
LOGIN_ACK : "LOGIN_ACK",
LOGIN_MUSIC_SESSION : "LOGIN_MUSIC_SESSION",
LOGIN_MUSIC_SESSION_ACK : "LOGIN_MUSIC_SESSION_ACK",
USER_JOINED_MUSIC_SESSION : "USER_JOINED_MUSIC_SESSION",
LEAVE_MUSIC_SESSION : "LEAVE_MUSIC_SESSION",
LEAVE_MUSIC_SESSION_ACK : "LEAVE_MUSIC_SESSION_ACK",
HEARTBEAT : "HEARTBEAT",
TEST_SESSION_MESSAGE : "TEST_SESSION_MESSAGE",
PING_REQUEST : "PING_REQUEST",
PING_ACK : "PING_ACK",
PEER_MESSAGE : "PEER_MESSAGE",
SERVER_GENERIC_ERROR : "SERVER_GENERIC_ERROR",
SERVER_REJECTION_ERROR : "SERVER_REJECTION_ERROR"
};
var route_to = context.JK.RouteToPrefix = {
CLIENT : "client",
SESSION : "session",
SERVER : "server",
USER : "user"
};
var factory = {};
function client_container(type, target, inner) {
var type_field = type.toLowerCase();
var body = { "type" : type, "route_to" : target};
body[type_field] = inner;
return body;
}
function route_to_client(client_id) {
return route_to.CLIENT + ":" + client_id;
}
function route_to_session(session_id) {
return route_to.SESSION + ":" + session_id;
}
// ping the provided client_id
factory.ping = function(client_id) {
var data = {};
return client_container(msg.PING_REQUEST, route_to_client(client_id), data);
};
// Heartbeat message
factory.heartbeat = function() {
var data = {};
return client_container(msg.HEARTBEAT, route_to.SERVER, data);
};
// create a login message using user/pass
factory.login_with_user_pass = function(username, password) {
var login = { username : username , password : password };
return client_container(msg.LOGIN, route_to.SERVER, login);
};
// create a login message using token (a cookie or similiar)
factory.login_with_token = function(token) {
var login = { token : token };
return client_container(msg.LOGIN, route_to.SERVER, login);
};
// create a music session login message
factory.login_music_session = function(music_session) {
var login_music_session = { music_session : music_session };
return client_container(msg.LOGIN_MUSIC_SESSION, route_to.SERVER, login_music_session);
};
// client-to-client message
factory.client_p2p_message = function(sender_client_id, receiver_client_id, message) {
var peer_message = { "message" : message };
var result = client_container(msg.PEER_MESSAGE, route_to_client(receiver_client_id), peer_message);
result.from = sender_client_id;
return result;
};
context.JK.MessageFactory = factory;
})(window, jQuery);