Compare commits
6 Commits
develop
...
switch-to-
Author | SHA1 | Date |
---|---|---|
John McLear | e175334757 | |
John McLear | 4297fd5916 | |
Mike DeRosa | 25f6c9bf9a | |
Mike DeRosa | 7861cae763 | |
Mike DeRosa | 070ba40f4f | |
Mike DeRosa | 4ccd7131d3 |
|
@ -223,6 +223,8 @@ exports.handleMessage = function(client, message)
|
|||
} else {
|
||||
messageLogger.warn("Dropped message, unknown COLLABROOM Data Type " + message.data.type);
|
||||
}
|
||||
} else if(message.type == "SWITCH_TO_PAD") {
|
||||
handleSwitchToPad(client, message);
|
||||
} else {
|
||||
messageLogger.warn("Dropped message, unknown Message Type " + message.type);
|
||||
}
|
||||
|
@ -236,18 +238,7 @@ exports.handleMessage = function(client, message)
|
|||
{
|
||||
// client tried to auth for the first time (first msg from the client)
|
||||
if(message.type == "CLIENT_READY") {
|
||||
// Remember this information since we won't
|
||||
// have the cookie in further socket.io messages.
|
||||
// This information will be used to check if
|
||||
// the sessionId of this connection is still valid
|
||||
// since it could have been deleted by the API.
|
||||
sessioninfos[client.id].auth =
|
||||
{
|
||||
sessionID: message.sessionID,
|
||||
padID: message.padId,
|
||||
token : message.token,
|
||||
password: message.password
|
||||
};
|
||||
createSessionInfo(client, message);
|
||||
}
|
||||
|
||||
// Note: message.sessionID is an entirely different kind of
|
||||
|
@ -882,6 +873,47 @@ function _correctMarkersInPad(atext, apool) {
|
|||
return builder.toString();
|
||||
}
|
||||
|
||||
function handleSwitchToPad(client, message)
|
||||
{
|
||||
// clear the session and leave the room
|
||||
var currentSession = sessioninfos[client.id];
|
||||
var padId = currentSession.padId;
|
||||
var roomClients = [], room = socketio.sockets.adapter.rooms[padId];
|
||||
if (room) {
|
||||
for (var id in room) {
|
||||
roomClients.push(socketio.sockets.adapter.nsp.connected[id]);
|
||||
}
|
||||
}
|
||||
for(var i = 0; i < roomClients.length; i++) {
|
||||
var sinfo = sessioninfos[roomClients[i].id];
|
||||
if(sinfo && sinfo.author == currentSession.author) {
|
||||
// fix user's counter, works on page refresh or if user closes browser window and then rejoins
|
||||
sessioninfos[roomClients[i].id] = {};
|
||||
roomClients[i].leave(padId);
|
||||
}
|
||||
}
|
||||
|
||||
// start up the new pad
|
||||
createSessionInfo(client, message);
|
||||
handleClientReady(client, message);
|
||||
}
|
||||
|
||||
function createSessionInfo(client, message)
|
||||
{
|
||||
// Remember this information since we won't
|
||||
// have the cookie in further socket.io messages.
|
||||
// This information will be used to check if
|
||||
// the sessionId of this connection is still valid
|
||||
// since it could have been deleted by the API.
|
||||
sessioninfos[client.id].auth =
|
||||
{
|
||||
sessionID: message.sessionID,
|
||||
padID: message.padId,
|
||||
token : message.token,
|
||||
password: message.password
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a CLIENT_READY. A CLIENT_READY is the first message from the client to the server. The Client sends his token
|
||||
* and the pad it wants to enter. The Server answers with the inital values (clientVars) of the pad
|
||||
|
|
|
@ -51,6 +51,8 @@ var gritter = require('./gritter').gritter;
|
|||
|
||||
var hooks = require('./pluginfw/hooks');
|
||||
|
||||
var receivedClientVars = false;
|
||||
|
||||
function createCookie(name, value, days, path){ /* Warning Internet Explorer doesn't use this it uses the one from pad_utils.js */
|
||||
if (days)
|
||||
{
|
||||
|
@ -160,6 +162,49 @@ function savePassword()
|
|||
return false;
|
||||
}
|
||||
|
||||
function sendClientReady(isReconnect, messageType)
|
||||
{
|
||||
messageType = typeof messageType !== 'undefined' ? messageType : 'CLIENT_READY';
|
||||
var padId = document.location.pathname.substring(document.location.pathname.lastIndexOf("/") + 1);
|
||||
padId = decodeURIComponent(padId); // unescape neccesary due to Safari and Opera interpretation of spaces
|
||||
|
||||
if(!isReconnect)
|
||||
{
|
||||
var titleArray = document.title.split('|');
|
||||
var title = titleArray[titleArray.length - 1];
|
||||
document.title = padId.replace(/_+/g, ' ') + " | " + title;
|
||||
}
|
||||
|
||||
var token = readCookie("token");
|
||||
if (token == null)
|
||||
{
|
||||
token = "t." + randomString();
|
||||
createCookie("token", token, 60);
|
||||
}
|
||||
|
||||
var sessionID = decodeURIComponent(readCookie("sessionID"));
|
||||
var password = readCookie("password");
|
||||
|
||||
var msg = {
|
||||
"component": "pad",
|
||||
"type": messageType,
|
||||
"padId": padId,
|
||||
"sessionID": sessionID,
|
||||
"password": password,
|
||||
"token": token,
|
||||
"protocolVersion": 2
|
||||
};
|
||||
|
||||
//this is a reconnect, lets tell the server our revisionnumber
|
||||
if(isReconnect == true)
|
||||
{
|
||||
msg.client_rev=pad.collabClient.getCurrentRevisionNumber();
|
||||
msg.reconnect=true;
|
||||
}
|
||||
|
||||
socket.json.send(msg);
|
||||
}
|
||||
|
||||
function handshake()
|
||||
{
|
||||
var loc = document.location;
|
||||
|
@ -176,44 +221,6 @@ function handshake()
|
|||
'sync disconnect on unload' : false
|
||||
});
|
||||
|
||||
function sendClientReady(isReconnect)
|
||||
{
|
||||
var padId = document.location.pathname.substring(document.location.pathname.lastIndexOf("/") + 1);
|
||||
padId = decodeURIComponent(padId); // unescape neccesary due to Safari and Opera interpretation of spaces
|
||||
|
||||
if(!isReconnect)
|
||||
document.title = padId.replace(/_+/g, ' ') + " | " + document.title;
|
||||
|
||||
var token = readCookie("token");
|
||||
if (token == null)
|
||||
{
|
||||
token = "t." + randomString();
|
||||
createCookie("token", token, 60);
|
||||
}
|
||||
|
||||
var sessionID = decodeURIComponent(readCookie("sessionID"));
|
||||
var password = readCookie("password");
|
||||
|
||||
var msg = {
|
||||
"component": "pad",
|
||||
"type": "CLIENT_READY",
|
||||
"padId": padId,
|
||||
"sessionID": sessionID,
|
||||
"password": password,
|
||||
"token": token,
|
||||
"protocolVersion": 2
|
||||
};
|
||||
|
||||
//this is a reconnect, lets tell the server our revisionnumber
|
||||
if(isReconnect == true)
|
||||
{
|
||||
msg.client_rev=pad.collabClient.getCurrentRevisionNumber();
|
||||
msg.reconnect=true;
|
||||
}
|
||||
|
||||
socket.json.send(msg);
|
||||
};
|
||||
|
||||
var disconnectTimeout;
|
||||
|
||||
socket.once('connect', function () {
|
||||
|
@ -228,7 +235,7 @@ function handshake()
|
|||
}
|
||||
|
||||
pad.collabClient.setChannelState("CONNECTED");
|
||||
sendClientReady(true);
|
||||
pad.sendClientReady(true);
|
||||
});
|
||||
|
||||
socket.on('disconnect', function (reason) {
|
||||
|
@ -246,7 +253,6 @@ function handshake()
|
|||
}
|
||||
});
|
||||
|
||||
var receivedClientVars = false;
|
||||
var initalized = false;
|
||||
|
||||
socket.on('message', function(obj)
|
||||
|
@ -286,7 +292,7 @@ function handshake()
|
|||
}
|
||||
|
||||
//if we haven't recieved the clientVars yet, then this message should it be
|
||||
else if (!receivedClientVars)
|
||||
else if (!receivedClientVars && obj.type == "CLIENT_VARS")
|
||||
{
|
||||
//log the message
|
||||
if (window.console) console.log(obj);
|
||||
|
@ -426,6 +432,30 @@ var pad = {
|
|||
{
|
||||
return pad.myUserInfo.name;
|
||||
},
|
||||
sendClientReady: function(isReconnect, messageType)
|
||||
{
|
||||
messageType = typeof messageType !== 'undefined' ? messageType : 'CLIENT_READY';
|
||||
sendClientReady(isReconnect, messageType);
|
||||
},
|
||||
switchToPad: function(padId)
|
||||
{
|
||||
var options = document.location.href.split('?')[1];
|
||||
var newHref = "/p/" + padId;
|
||||
if (options != null)
|
||||
newHref = newHref + '?' + options;
|
||||
|
||||
if(window.history && window.history.pushState)
|
||||
{
|
||||
$('#chattext p').remove(); //clear the chat messages
|
||||
window.history.pushState("", "", newHref);
|
||||
receivedClientVars = false;
|
||||
sendClientReady(false, 'SWITCH_TO_PAD');
|
||||
}
|
||||
else // fallback
|
||||
{
|
||||
window.location.href = newHref;
|
||||
}
|
||||
},
|
||||
sendClientMessage: function(msg)
|
||||
{
|
||||
pad.collabClient.sendClientMessage(msg);
|
||||
|
|
Loading…
Reference in New Issue