Hooking up the JS bridge to C++ and p2p messages.
This commit is contained in:
parent
8397291ab1
commit
b96a4b8f36
|
|
@ -1,31 +1,35 @@
|
|||
/*
|
||||
Message builder for communicating over the websocket
|
||||
*/
|
||||
(function(context) {
|
||||
(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:";
|
||||
context.JK = context.JK || {};
|
||||
|
||||
var msg = context.Messages = {
|
||||
LOGIN : "LOGIN",
|
||||
LOGIN_ACK : "LOGIN_ACK",
|
||||
LOGIN_MUSIC_SESSION : "LOGIN_MUSIC_SESSION",
|
||||
LOGIN_MUSIC_SESSION_ACK : "LOGIN_MUSIC_SESSION_ACK",
|
||||
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",
|
||||
SERVER_GENERIC_ERROR : "SERVER_GENERIC_ERROR",
|
||||
SERVER_REJECTION_ERROR : "SERVER_REJECTION_ERROR"
|
||||
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 message_factory = {};
|
||||
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();
|
||||
|
|
@ -34,31 +38,46 @@
|
|||
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
|
||||
message_factory.ping = function(client_id) {
|
||||
factory.ping = function(client_id) {
|
||||
var data = {};
|
||||
var target = CLIENT_TARGET_PREFIX + client_id;
|
||||
return client_container(msg.PING_REQUEST, target, data);
|
||||
return client_container(msg.PING_REQUEST, route_to_client(client_id), data);
|
||||
};
|
||||
|
||||
// create a login message using user/pass
|
||||
message_factory.login_with_user_pass = function(username, password) {
|
||||
factory.login_with_user_pass = function(username, password) {
|
||||
var login = { username : username , password : password };
|
||||
return client_container(msg.LOGIN, SERVER_TARGET, login);
|
||||
return client_container(msg.LOGIN, route_to.SERVER, login);
|
||||
};
|
||||
|
||||
// create a login message using token (a cookie or similiar)
|
||||
message_factory.login_with_token = function(token) {
|
||||
factory.login_with_token = function(token) {
|
||||
var login = { token : token };
|
||||
return client_container(msg.LOGIN, SERVER_TARGET, login);
|
||||
return client_container(msg.LOGIN, route_to.SERVER, 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);
|
||||
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);
|
||||
};
|
||||
|
||||
window.message_factory = message_factory;
|
||||
// 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;
|
||||
};
|
||||
|
||||
})(window);
|
||||
context.JK.MessageFactory = factory;
|
||||
|
||||
})(window, jQuery);
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
// The wrapper around the web-socket connection to the server
|
||||
(function(context, $) {
|
||||
var server = {};
|
||||
context.JK = context.JK || {};
|
||||
|
||||
var logger = context.JK.logger;
|
||||
var msg_factory = context.JK.MessageFactory;
|
||||
|
||||
// Let socket.io know where WebSocketMain.swf is
|
||||
WEB_SOCKET_SWF_LOCATION = "assets/flash/WebSocketMain.swf";
|
||||
|
||||
var server = {};
|
||||
server.socket = {};
|
||||
server.singedIn = false;
|
||||
server.dispatchTable = {};
|
||||
|
||||
// TODO: Create the message factory here
|
||||
//server.messageFactory = context.message_factory;
|
||||
|
||||
server.registerMessageCallback = function(messageType, callback) {
|
||||
if (server.dispatchTable[messageType] === undefined) {
|
||||
server.dispatchTable[messageType] = [];
|
||||
|
|
@ -38,11 +38,7 @@
|
|||
};
|
||||
|
||||
server.connect = function() {
|
||||
server.registerMessageCallback(
|
||||
context.Messages.LOGIN_ACK,
|
||||
function() { server.signedIn = true; }
|
||||
);
|
||||
|
||||
logger.log("server.connect");
|
||||
server.socket = new WebSocket(gon.websocket_gateway_uri);
|
||||
server.socket.onopen = server.onOpen;
|
||||
server.socket.onmessage = server.onMessage;
|
||||
|
|
@ -50,24 +46,23 @@
|
|||
};
|
||||
|
||||
server.onOpen = function() {
|
||||
logger.log('server.onOpen');
|
||||
logger.log("server.onOpen");
|
||||
var token, loginMessage;
|
||||
|
||||
token = $.cookie("remember_token");
|
||||
loginMessage = context.message_factory.login_with_token(token);
|
||||
|
||||
loginMessage = msg_factory.login_with_token(token);
|
||||
server.send(loginMessage);
|
||||
};
|
||||
|
||||
server.onMessage = function(e) {
|
||||
logger.log('server.onMessage');
|
||||
logger.log("server.onMessage");
|
||||
var message = JSON.parse(e.data),
|
||||
messageType = message.type.toLowerCase(),
|
||||
payload = message[messageType],
|
||||
callbacks = server.dispatchTable[message.type];
|
||||
|
||||
if (callbacks !== undefined) {
|
||||
for(var i = callbacks.length; i--;) {
|
||||
var len = callbacks.length;
|
||||
for(var i = 0; i < len; i++) {
|
||||
callbacks[i](messageType, payload);
|
||||
}
|
||||
}
|
||||
|
|
@ -78,13 +73,24 @@
|
|||
|
||||
server.onClose = function() {
|
||||
logger.log("Socket to server closed.");
|
||||
|
||||
if (context.jamClient !== undefined)
|
||||
{
|
||||
context.jamClient.connected = false;
|
||||
}
|
||||
|
||||
// TODO: reconnect
|
||||
};
|
||||
|
||||
server.send = function(message) {
|
||||
var jsMessage = JSON.stringify(message);
|
||||
logger.log('server.send(' + jsMessage + ')');
|
||||
server.socket.send(jsMessage);
|
||||
logger.log("server.send(" + jsMessage + ")");
|
||||
if (server !== undefined && server.socket !== undefined && server.socket.send !== undefined) {
|
||||
server.socket.send(jsMessage);
|
||||
} else {
|
||||
logger.log("Dropped message because server connection is closed.");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
server.loginSession = function(sessionId) {
|
||||
|
|
@ -96,10 +102,49 @@
|
|||
return;
|
||||
}
|
||||
|
||||
loginMessage = context.message_factory.login_jam_session(sessionId);
|
||||
loginMessage = msg_factory.login_jam_session(sessionId);
|
||||
server.send(loginMessage);
|
||||
};
|
||||
|
||||
context.JamServer = server;
|
||||
server.sendP2PMessage = function(receiver_id, message) {
|
||||
logger.log("P2P message from [" + server.clientID + "] to [" + receiver_id + "]: " + message);
|
||||
var outgoing_msg = msg_factory.client_p2p_message(server.clientID, receiver_id, message);
|
||||
server.send(outgoing_msg);
|
||||
};
|
||||
|
||||
context.JK.JamServer = server;
|
||||
|
||||
// Message callbacks
|
||||
server.registerMessageCallback(context.JK.MessageType.LOGIN_ACK, function(type, payload) {
|
||||
server.signedIn = true;
|
||||
server.clientID = payload.client_id;
|
||||
|
||||
if (context.jamClient !== undefined)
|
||||
{
|
||||
context.jamClient.connected = true;
|
||||
context.jamClient.clientID = server.clientID;
|
||||
}
|
||||
});
|
||||
|
||||
server.registerMessageCallback(context.JK.MessageType.PEER_MESSAGE, function(type, payload) {
|
||||
if (context.jamClient !== undefined)
|
||||
{
|
||||
context.jamClient.P2PMessageReceived(payload.sender_id, payload.message);
|
||||
}
|
||||
});
|
||||
|
||||
server.registerMessageCallback(context.JK.MessageType.LOGIN_MUSIC_SESSION_ACK, function(type, payload) {
|
||||
if (context.jamClient !== undefined)
|
||||
{
|
||||
// TODO: modify the LOGIN_MUSIC_SESSION_ACK message to include session_id
|
||||
context.jamClient.JoinSession({ sessionID : payload.session_id});
|
||||
}
|
||||
});
|
||||
|
||||
// Callbacks from jamClient
|
||||
if (context.jamClient !== undefined)
|
||||
{
|
||||
context.jamClient.SendP2PMessage.connect(server.sendP2PMessage);
|
||||
}
|
||||
|
||||
})(window, jQuery);
|
||||
|
|
@ -8,14 +8,14 @@
|
|||
context.JK = context.JK || {};
|
||||
context.JK.Messaging = function(app) {
|
||||
|
||||
if ("undefined" === typeof(context.JamServer))
|
||||
if ("undefined" === typeof(context.JK.JamServer))
|
||||
return;
|
||||
|
||||
// Alias some of the globals for less typing.
|
||||
var logger = context.JK.logger;
|
||||
var server = context.JamServer;
|
||||
var messages = context.Messages;
|
||||
var msg_factory = context.message_factory;
|
||||
var server = context.JK.JamServer;
|
||||
var messages = context.JK.MessageType;
|
||||
var msg_factory = context.JK.MessageFactory;
|
||||
|
||||
var myClientId = null;
|
||||
var myPingTimer = null;
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
this.register = function() {
|
||||
for (var message in messages) {
|
||||
logger.debug("registering " + message);
|
||||
context.JamServer.registerMessageCallback(message, logMessage);
|
||||
server.registerMessageCallback(message, logMessage);
|
||||
}
|
||||
|
||||
registerLoginPinger();
|
||||
|
|
|
|||
|
|
@ -451,10 +451,20 @@
|
|||
var sessionScreen = new JK.SessionScreen(jk);
|
||||
sessionScreen.initialize();
|
||||
|
||||
var messaging = new JK.Messaging(jk);
|
||||
messaging.register();
|
||||
// Disabled for now to debug p2p messaging
|
||||
//var messaging = new JK.Messaging(jk);
|
||||
//messaging.register();
|
||||
|
||||
window.JamServer.connect();
|
||||
var jam_server = JK.JamServer;
|
||||
|
||||
if (jamClient !== undefined) {
|
||||
jam_server.registerMessageCallback(JK.MessageType.LOGIN_ACK, function(type, payload) {
|
||||
// This is just a test to kick off sending a few messages to self
|
||||
jamClient.JoinSession({ sessionID : 'just a test'});
|
||||
});
|
||||
}
|
||||
|
||||
jam_server.connect();
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue