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

64 lines
2.2 KiB
JavaScript

/*
Message builder for communicating over the websocket
*/
(function(context) {
var CLIENT_TARGET = "client";
var SERVER_TARGET = "server";
var SESSION_TARGET_PREFIX = "session:";
var USER_TARGET_PREFIX = "user:";
var CLIENT_TARGET_PREFIX = "client:";
var msg = context.Messages = {
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",
SERVER_GENERIC_ERROR : "SERVER_GENERIC_ERROR",
SERVER_REJECTION_ERROR : "SERVER_REJECTION_ERROR"
};
var message_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;
}
// ping the provided client_id
message_factory.ping = function(client_id) {
var data = {};
var target = CLIENT_TARGET_PREFIX + client_id;
return client_container(msg.PING_REQUEST, target, data);
};
// create a login message using user/pass
message_factory.login_with_user_pass = function(username, password) {
var login = { username : username , password : password };
return client_container(msg.LOGIN, SERVER_TARGET, login);
};
// create a login message using token (a cookie or similiar)
message_factory.login_with_token = function(token) {
var login = { token : token };
return client_container(msg.LOGIN, SERVER_TARGET, login);
};
// create a music session login message
message_factory.login_music_session = function(music_session) {
var login_music_session = { music_session : music_session };
return client_container(msg.LOGIN_MUSIC_SESSION, SERVER_TARGET, login_music_session);
};
window.message_factory = message_factory;
})(window);