105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
// The wrapper around the web-socket connection to the server
|
|
(function(context, $) {
|
|
var server = {};
|
|
var logger = context.JK.logger;
|
|
|
|
// 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 = context.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(
|
|
context.Messages.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() {
|
|
logger.log('server.onOpen');
|
|
var token, loginMessage;
|
|
|
|
token = $.cookie("remember_token");
|
|
loginMessage = context.message_factory.login_with_token(token);
|
|
|
|
server.send(loginMessage);
|
|
};
|
|
|
|
server.onMessage = function(e) {
|
|
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--;) {
|
|
callbacks[i](messageType, payload);
|
|
}
|
|
}
|
|
else {
|
|
logger.log("Unexpected message type %s.", message.type);
|
|
}
|
|
};
|
|
|
|
server.onClose = function() {
|
|
logger.log("Socket to server closed.");
|
|
// TODO: reconnect
|
|
};
|
|
|
|
server.send = function(message) {
|
|
var jsMessage = JSON.stringify(message);
|
|
logger.log('server.send(' + jsMessage + ')');
|
|
server.socket.send(jsMessage);
|
|
};
|
|
|
|
server.loginSession = function(sessionId) {
|
|
var loginMessage;
|
|
|
|
if (!signedIn) {
|
|
logger.log("Not signed in!");
|
|
// TODO: surface the error
|
|
return;
|
|
}
|
|
|
|
loginMessage = context.message_factory.login_jam_session(sessionId);
|
|
server.send(loginMessage);
|
|
};
|
|
|
|
context.JamServer = server;
|
|
|
|
})(window, jQuery); |