summaryrefslogtreecommitdiff
path: root/src/node
diff options
context:
space:
mode:
authormluto <m@luto.at>2013-01-06 16:11:48 +0100
committermluto <m@luto.at>2013-01-06 16:11:48 +0100
commit5592c4b0feb42082ab50e1c90753c28e5cd79334 (patch)
treeef5d45a03a6a0e46e03d53bda33e212db542a7a1 /src/node
parent9484b92ae236888fc72a181adf3248816b52b7f0 (diff)
downloadetherpad-lite-5592c4b0feb42082ab50e1c90753c28e5cd79334.zip
client loads messages using the new client loads messages using new method, getChatMessages restructured and renamed to getLastChatMessages, added GET_CHAT_MESSAGES, getChatMessages restructured and renamed to getLastChatMessages
Diffstat (limited to 'src/node')
-rw-r--r--src/node/db/Pad.js26
-rw-r--r--src/node/handler/PadMessageHandler.js87
2 files changed, 78 insertions, 35 deletions
diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js
index dba791fd..0914c175 100644
--- a/src/node/db/Pad.js
+++ b/src/node/db/Pad.js
@@ -281,27 +281,7 @@ Pad.prototype.getChatMessage = function getChatMessage(entryNum, callback) {
});
};
-Pad.prototype.getLastChatMessages = function getLastChatMessages(count, callback) {
- //return an empty array if there are no chat messages
- if(this.chatHead == -1)
- {
- callback(null, []);
- return;
- }
-
- var _this = this;
-
- //works only if we decrement the amount, for some reason
- count--;
-
- //set the startpoint
- var start = this.chatHead-count;
- if(start < 0)
- start = 0;
-
- //set the endpoint
- var end = this.chatHead;
-
+Pad.prototype.getChatMessages = function getChatMessages(start, end, callback) {
//collect the numbers of chat entries and in which order we need them
var neededEntries = [];
var order = 0;
@@ -310,7 +290,9 @@ Pad.prototype.getLastChatMessages = function getLastChatMessages(count, callback
neededEntries.push({entryNum:i, order: order});
order++;
}
-
+
+ var _this = this;
+
//get all entries out of the database
var entries = [];
async.forEach(neededEntries, function(entryObject, callback)
diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js
index ef70d604..00eb234e 100644
--- a/src/node/handler/PadMessageHandler.js
+++ b/src/node/handler/PadMessageHandler.js
@@ -205,6 +205,8 @@ exports.handleMessage = function(client, message)
handleUserInfoUpdate(client, message);
} else if (message.data.type == "CHAT_MESSAGE") {
handleChatMessage(client, message);
+ } else if (message.data.type == "GET_CHAT_MESSAGES") {
+ handleGetChatMessages(client, message);
} else if (message.data.type == "SAVE_REVISION") {
handleSaveRevisionMessage(client, message);
} else if (message.data.type == "CLIENT_MESSAGE" &&
@@ -362,6 +364,74 @@ function handleChatMessage(client, message)
});
}
+/**
+ * Handles the clients requets for more chat-messages
+ * @param client the client that send this message
+ * @param message the message from the client
+ */
+function handleGetChatMessages(client, message)
+{
+ if(message.data.start == null)
+ {
+ messageLogger.warn("Dropped message, GetChatMessages Message has no start!");
+ return;
+ }
+ if(message.data.end == null)
+ {
+ messageLogger.warn("Dropped message, GetChatMessages Message has no start!");
+ return;
+ }
+
+ var start = message.data.start;
+ var end = message.data.end;
+ var count = start - count;
+
+ if(count < 0 && count > 100)
+ {
+ messageLogger.warn("Dropped message, GetChatMessages Message, client requested invalid amout of messages!");
+ return;
+ }
+
+ var padId = sessioninfos[client.id].padId;
+ var pad;
+
+ async.series([
+ //get the pad
+ function(callback)
+ {
+ padManager.getPad(padId, function(err, _pad)
+ {
+ if(ERR(err, callback)) return;
+ pad = _pad;
+ callback();
+ });
+ },
+ function(callback)
+ {
+ pad.getChatMessages(start, end, function(err, chatMessages)
+ {
+ if(ERR(err, callback)) return;
+
+ var infoMsg = {
+ type: "COLLABROOM",
+ data: {
+ type: "CHAT_MESSAGES",
+ messages: chatMessages
+ }
+ };
+
+ // send the messages back to the client
+ for(var i in pad2sessions[padId])
+ {
+ if(pad2sessions[padId][i] == client.id)
+ {
+ socketio.sockets.sockets[pad2sessions[padId][i]].json.send(infoMsg);
+ break;
+ }
+ }
+ });
+ }]);
+}
/**
* Handles a handleSuggestUserName, that means a user have suggest a userName for a other user
@@ -778,7 +848,6 @@ function handleClientReady(client, message)
var pad;
var historicalAuthorData = {};
var currentTime;
- var chatMessages;
var padIds;
async.series([
@@ -852,7 +921,7 @@ function handleClientReady(client, message)
}
], callback);
},
- //these db requests all need the pad object (timestamp of latest revission, author data, chat messages)
+ //these db requests all need the pad object (timestamp of latest revission, author data)
function(callback)
{
var authors = pad.getAllAuthors();
@@ -881,16 +950,6 @@ function handleClientReady(client, message)
callback();
});
}, callback);
- },
- //get the latest chat messages
- function(callback)
- {
- pad.getLastChatMessages(100, function(err, _chatMessages)
- {
- if(ERR(err, callback)) return;
- chatMessages = _chatMessages;
- callback();
- });
}
], callback);
@@ -968,7 +1027,9 @@ function handleClientReady(client, message)
"padId": message.padId,
"initialTitle": "Pad: " + message.padId,
"opts": {},
- "chatHistory": chatMessages,
+ // tell the client the number of the latest chat-message, which will be
+ // used to request the latest 100 chat-messages later (GET_CHAT_MESSAGES)
+ "chatHead": pad.chatHead,
"numConnectedUsers": pad2sessions[padIds.padId].length,
"isProPad": false,
"readOnlyId": padIds.readOnlyPadId,