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

97 lines
2.8 KiB
JavaScript

// The wrapper around the web-socket connection to the server
(function(global, $) {
var server = {};
// Let socket.io know where WebSocketMain.swf is
WEB_SOCKET_SWF_LOCATION = "assets/flash/WebSocketMain.swf";
server.socket = {};
server.singedIn = false;
server.dispatchTable = {};
// TODO: Create the message factory here
//server.messageFactory = global.message_factory;
server.registerMessageCallback = function(messageType, callback) {
if (server.dispatchTable[messageType] === undefined) {
server.dispatchTable[messageType] = [];
}
server.dispatchTable[messageType].push(callback);
};
server.unregisterMessageCallback = function(messageType, callback) {
if (server.dispatchTable[messageType] !== undefined) {
for(var i = server.dispatchTable.length; i--;) {
if (server.dispatchTable[messageType][i] === callback)
{
server.dispatchTable[messageType].splice(i, 1);
break;
}
}
}
if (server.dispatchTable[messageType].length == 0) {
delete server.dispatchTable[messageType];
}
};
server.connect = function() {
server.registerMessageCallback(LOGIN_ACK, function() { server.signedIn = true; });
server.socket = new WebSocket(gon.websocket_gateway_uri);
server.socket.onopen = server.onOpen;
server.socket.onmessage = server.onMessage;
server.socket.onclose = server.onClose;
};
server.onOpen = function() {
var token, loginMessage;
token = $.cookie("remember_token");
loginMessage = global.message_factory.login_with_token(token);
server.send(loginMessage);
};
server.onMessage = function(e) {
var message = JSON.parse(e.data),
payload = message[message.type.toLowerCase()],
callbacks = server.dispatchTable[message.type];
if (callbacks !== undefined) {
for(var i = callbacks.length; i--;) {
callbacks[i](payload);
}
}
else {
console.log("Unexpected message type %s.", message.type);
}
};
server.onClose = function() {
console.log("Socket to server closed.");
// TODO: reconnect
};
server.send = function(message) {
server.socket.send(JSON.stringify(message));
};
server.loginSession = function(sessionId) {
var loginMessage;
if (!signedIn) {
console.log("Not signed in!");
// TODO: surface the error
return;
}
loginMessage = global.message_factory.login_jam_session(sessionId);
server.send(loginMessage);
};
global.JamServer = server;
})(window, jQuery);