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

219 lines
8.8 KiB
JavaScript
Raw Permalink Normal View History

2012-09-03 22:03:16 +00:00
/*
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",
LEAVE_MUSIC_SESSION : "LEAVE_MUSIC_SESSION",
LEAVE_MUSIC_SESSION_ACK : "LEAVE_MUSIC_SESSION_ACK",
HEARTBEAT : "HEARTBEAT",
HEARTBEAT_ACK : "HEARTBEAT_ACK",
SUBSCRIBE : "SUBSCRIBE",
UNSUBSCRIBE : "UNSUBSCRIBE",
SUBSCRIPTION_MESSAGE : "SUBSCRIPTION_MESSAGE",
SUBSCRIBE_BULK : "SUBSCRIBE_BULK",
2016-01-19 00:41:53 +00:00
USER_STATUS : "USER_STATUS",
2013-12-29 04:51:35 +00:00
// friend notifications
2013-03-23 07:51:55 +00:00
FRIEND_UPDATE : "FRIEND_UPDATE",
2013-12-29 04:51:35 +00:00
FRIEND_REQUEST : "FRIEND_REQUEST",
FRIEND_REQUEST_ACCEPTED : "FRIEND_REQUEST_ACCEPTED",
FRIEND_SESSION_JOIN : "FRIEND_SESSION_JOIN",
NEW_USER_FOLLOWER : "NEW_USER_FOLLOWER",
NEW_BAND_FOLLOWER : "NEW_BAND_FOLLOWER",
// session notifications
2013-03-23 07:51:55 +00:00
SESSION_INVITATION : "SESSION_INVITATION",
2013-12-29 04:51:35 +00:00
SESSION_ENDED : "SESSION_ENDED",
2013-03-23 07:51:55 +00:00
JOIN_REQUEST : "JOIN_REQUEST",
JOIN_REQUEST_APPROVED : "JOIN_REQUEST_APPROVED",
JOIN_REQUEST_REJECTED : "JOIN_REQUEST_REJECTED",
2014-01-02 19:57:16 +00:00
SESSION_JOIN : "SESSION_JOIN",
SESSION_DEPART : "SESSION_DEPART",
TRACKS_CHANGED : "TRACKS_CHANGED",
MUSICIAN_SESSION_JOIN : "MUSICIAN_SESSION_JOIN",
BAND_SESSION_JOIN : "BAND_SESSION_JOIN",
SCHEDULED_SESSION_INVITATION : "SCHEDULED_SESSION_INVITATION",
SCHEDULED_SESSION_RSVP : "SCHEDULED_SESSION_RSVP",
SCHEDULED_SESSION_RSVP_APPROVED : "SCHEDULED_SESSION_RSVP_APPROVED",
SCHEDULED_SESSION_RSVP_CANCELLED : "SCHEDULED_SESSION_RSVP_CANCELLED",
SCHEDULED_SESSION_RSVP_CANCELLED_ORG : "SCHEDULED_SESSION_RSVP_CANCELLED_ORG",
SCHEDULED_SESSION_CANCELLED : "SCHEDULED_SESSION_CANCELLED",
SCHEDULED_SESSION_RESCHEDULED : "SCHEDULED_SESSION_RESCHEDULED",
SCHEDULED_SESSION_REMINDER : "SCHEDULED_SESSION_REMINDER",
SCHEDULED_SESSION_COMMENT : "SCHEDULED_SESSION_COMMENT",
2013-12-29 04:51:35 +00:00
SCHEDULED_JAMCLASS_INVITATION : "SCHEDULED_JAMCLASS_INVITATION",
LESSON_MESSAGE : "LESSON_MESSAGE",
2013-12-29 04:51:35 +00:00
// recording notifications
MUSICIAN_RECORDING_SAVED : "MUSICIAN_RECORDING_SAVED",
BAND_RECORDING_SAVED : "BAND_RECORDING_SAVED",
RECORDING_STARTED : "RECORDING_STARTED",
RECORDING_ENDED : "RECORDING_ENDED",
RECORDING_MASTER_MIX_COMPLETE : "RECORDING_MASTER_MIX_COMPLETE",
DOWNLOAD_AVAILABLE : "DOWNLOAD_AVAILABLE",
RECORDING_STREAM_MIX_COMPLETE : "RECORDING_STREAM_MIX_COMPLETE",
2013-12-29 04:51:35 +00:00
// band notifications
BAND_INVITATION : "BAND_INVITATION",
BAND_INVITATION_ACCEPTED : "BAND_INVITATION_ACCEPTED",
2013-12-29 04:51:35 +00:00
// text message
TEXT_MESSAGE : "TEXT_MESSAGE",
CHAT_MESSAGE : "CHAT_MESSAGE",
2016-01-19 00:41:53 +00:00
SEND_CHAT_MESSAGE : "SEND_CHAT_MESSAGE",
// broadcast notifications
SOURCE_UP_REQUESTED : "SOURCE_UP_REQUESTED",
SOURCE_DOWN_REQUESTED : "SOURCE_DOWN_REQUESTED",
SOURCE_UP : "SOURCE_UP",
SOURCE_DOWN : "SOURCE_DOWN",
TEST_SESSION_MESSAGE : "TEST_SESSION_MESSAGE",
PING_REQUEST : "PING_REQUEST",
PING_ACK : "PING_ACK",
PEER_MESSAGE : "PEER_MESSAGE",
CLIENT_UPDATE : "CLIENT_UPDATE",
2014-09-13 03:30:51 +00:00
GENERIC_MESSAGE : "GENERIC_MESSAGE",
RELOAD : "RELOAD",
RESTART_APPLICATION : "RESTART_APPLICATION",
STOP_APPLICATION : "STOP_APPLICATION",
SERVER_BAD_STATE_RECOVERED: "SERVER_BAD_STATE_RECOVERED",
SERVER_GENERIC_ERROR : "SERVER_GENERIC_ERROR",
SERVER_REJECTION_ERROR : "SERVER_REJECTION_ERROR",
SERVER_BAD_STATE_ERROR : "SERVER_BAD_STATE_ERROR",
SERVER_DUPLICATE_CLIENT_ERROR : "SERVER_DUPLICATE_CLIENT_ERROR"
};
var route_to = context.JK.RouteToPrefix = {
CLIENT : "client",
SESSION : "session",
SERVER : "server",
USER : "user"
};
var factory = {};
2012-09-03 22:03:16 +00:00
function client_container(type, target, inner) {
var type_field = type.toLowerCase();
var body = { "type" : type, "route_to" : target};
body[type_field] = inner;
return body;
2012-09-03 22:03:16 +00:00
}
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
2016-01-19 00:41:53 +00:00
factory.heartbeat = function(lastNotificationSeen, lastNotificationSeenAt, active) {
var data = {};
data.notification_seen = lastNotificationSeen;
data.notification_seen_at = lastNotificationSeenAt;
2016-01-19 00:41:53 +00:00
data.active = active;
return client_container(msg.HEARTBEAT, route_to.SERVER, data);
};
2016-01-19 00:41:53 +00:00
// User Status update message
factory.userStatus = function(active, status) {
var data = {};
data.active = active;
data.status = status;
return client_container(msg.USER_STATUS, route_to.SERVER, data);
};
factory.chatMessage = function(channel, msg) {
var data = {}
data.channel = {}
data.msg = {}
return client_container(msg.SEND_CHAT_MESSAGE, route_to.SERVER, data)
}
2012-09-03 22:03:16 +00:00
// 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);
};
2012-09-03 22:03:16 +00:00
// create a login message using token (a cookie or similiar)
// reconnect_music_session_id is an optional argument that allows the session to be immediately associated
// with a music session.
factory.login_with_token = function(token, reconnect_music_session_id, client_type) {
2013-12-29 04:51:35 +00:00
//context.JK.logger.debug("*** login_with_token: client_id = "+$.cookie("client_id"));
var login = {
token : token,
client_id : $.cookie("client_id"),
client_type : client_type
2013-12-29 04:51:35 +00:00
};
return client_container(msg.LOGIN, route_to.SERVER, login);
};
2012-09-03 22:03:16 +00:00
factory.logout = function() {
var logout = {}
return client_container(msg.LOGOUT, route_to.SERVER, logout);
}
2014-05-19 13:46:03 +00:00
// create a login message using only the client_id. only valid for latency_tester
factory.login_with_client_id = function(client_id, client_type) {
if(client_type != 'latency_tester') {
throw "client_type must be latency_tester in login_with_client_id";
}
var login = {
client_id : client_id,
client_type : client_type
};
return client_container(msg.LOGIN, route_to.SERVER, login);
};
2012-10-03 00:54:29 +00:00
// 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;
};
factory.subscribe = function(type, id) {
var subscribe_msg = {type: type, id: id}
return client_container(msg.SUBSCRIBE, route_to.SERVER, subscribe_msg);
}
factory.subscribeBulk = function(types, ids) {
var subscribe_bulk_msg = {types: types, ids: ids}
return client_container(msg.SUBSCRIBE_BULK, route_to.SERVER, subscribe_bulk_msg);
}
factory.unsubscribe = function(type, id) {
var unsubscribe_msg = {type: type, id: id}
return client_container(msg.UNSUBSCRIBE, route_to.SERVER, unsubscribe_msg);
}
context.JK.MessageFactory = factory;
2012-09-03 22:03:16 +00:00
})(window, jQuery);