summaryrefslogtreecommitdiff
path: root/lib/realtime.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/realtime.js62
1 files changed, 33 insertions, 29 deletions
diff --git a/lib/realtime.js b/lib/realtime.js
index 73f831f4..a662deeb 100644
--- a/lib/realtime.js
+++ b/lib/realtime.js
@@ -71,7 +71,6 @@ function emitCheck(note) {
authors: note.authors,
authorship: note.authorship
};
- out = LZString.compressToUTF16(JSON.stringify(out));
realtime.io.to(note.id).emit('check', out);
}
@@ -84,6 +83,7 @@ var updater = setInterval(function () {
var note = notes[key];
if (note.server.isDirty) {
if (config.debug) logger.info("updater found dirty note: " + key);
+ note.server.isDirty = false;
updateNote(note, function(err, _note) {
// handle when note already been clean up
if (!notes[key] || !notes[key].server) return callback(null, null);
@@ -104,7 +104,6 @@ var updater = setInterval(function () {
}
return callback(err, null);
}
- note.server.isDirty = false;
note.updatetime = moment(_note.lastchangeAt).valueOf();
emitCheck(note);
return callback(null, null);
@@ -153,12 +152,10 @@ function finishUpdateNote(note, _note, callback) {
if (!note || !note.server) return callback(null, null);
var body = note.server.document;
var title = note.title = models.Note.parseNoteTitle(body);
- title = LZString.compressToBase64(title);
- body = LZString.compressToBase64(body);
var values = {
title: title,
content: body,
- authorship: LZString.compressToBase64(JSON.stringify(note.authorship)),
+ authorship: note.authorship,
lastchangeuserId: note.lastchangeuser,
lastchangeAt: Date.now()
};
@@ -211,6 +208,7 @@ function getStatus(callback) {
var distinctregaddresses = [];
Object.keys(users).forEach(function (key) {
var user = users[key];
+ if (!user) return;
var found = false;
for (var i = 0; i < distinctaddresses.length; i++) {
if (user.address == distinctaddresses[i]) {
@@ -300,14 +298,14 @@ function emitOnlineUsers(socket) {
var out = {
users: users
};
- out = LZString.compressToUTF16(JSON.stringify(out));
realtime.io.to(noteId).emit('online users', out);
}
function emitUserStatus(socket) {
var noteId = socket.noteId;
- if (!noteId || !notes[noteId]) return;
- var out = buildUserOutData(users[socket.id]);
+ var user = users[socket.id];
+ if (!noteId || !notes[noteId] || !user) return;
+ var out = buildUserOutData(user);
socket.broadcast.to(noteId).emit('user status', out);
}
@@ -328,7 +326,6 @@ function emitRefresh(socket) {
createtime: note.createtime,
updatetime: note.updatetime
};
- out = LZString.compressToUTF16(JSON.stringify(out));
socket.emit('refresh', out);
}
@@ -460,7 +457,7 @@ function startConnection(socket) {
var lastchangeuser = note.lastchangeuserId;
var lastchangeuserprofile = note.lastchangeuser ? models.User.getProfile(note.lastchangeuser) : null;
- var body = LZString.decompressFromBase64(note.content);
+ var body = note.content;
var createtime = note.createdAt;
var updatetime = note.lastchangeAt;
var server = new ot.EditorSocketIOServer(body, [], noteId, ifMayEdit, operationCallback);
@@ -480,7 +477,7 @@ function startConnection(socket) {
notes[noteId] = {
id: noteId,
alias: note.alias,
- title: LZString.decompressFromBase64(note.title),
+ title: note.title,
owner: owner,
ownerprofile: ownerprofile,
permission: note.permission,
@@ -492,7 +489,7 @@ function startConnection(socket) {
updatetime: moment(updatetime).valueOf(),
server: server,
authors: authors,
- authorship: note.authorship ? JSON.parse(LZString.decompressFromBase64(note.authorship)) : []
+ authorship: note.authorship
};
return finishConnection(socket, notes[noteId], users[socket.id]);
@@ -532,7 +529,9 @@ function disconnect(socket) {
var note = notes[noteId];
if (note) {
// delete user in users
- delete note.users[socket.id];
+ if (note.users[socket.id]) {
+ delete note.users[socket.id];
+ }
// remove sockets in the note socks
do {
var index = note.socks.indexOf(socket);
@@ -649,14 +648,14 @@ function operationCallback(socket, operation) {
var userId = null;
// save authors
if (socket.request.user && socket.request.user.logged_in) {
- var socketId = socket.id;
- var user = users[socketId];
+ var user = users[socket.id];
+ if (!user) return;
userId = socket.request.user.id;
if (!note.authors[userId]) {
models.Author.create({
noteId: noteId,
userId: userId,
- color: users[socketId].color
+ color: user.color
}).then(function (author) {
note.authors[author.userId] = {
userid: author.userId,
@@ -743,11 +742,11 @@ function connection(socket) {
//received user status
socket.on('user status', function (data) {
var noteId = socket.noteId;
- if (!noteId || !notes[noteId]) return;
+ var user = users[socket.id];
+ if (!noteId || !notes[noteId] || !user) return;
if (config.debug)
logger.info('SERVER received [' + noteId + '] user status from [' + socket.id + ']: ' + JSON.stringify(data));
if (data) {
- var user = users[socket.id];
user.idle = data.idle;
user.type = data.type;
}
@@ -763,6 +762,7 @@ function connection(socket) {
var note = notes[noteId];
//Only owner can change permission
if (note.owner && note.owner == socket.request.user.id) {
+ if (permission == 'freely' && !config.allowanonymous) return;
note.permission = permission;
models.Note.update({
permission: permission
@@ -839,7 +839,9 @@ function connection(socket) {
logger.info('user changed');
var noteId = socket.noteId;
if (!noteId || !notes[noteId]) return;
- updateUserData(socket, notes[noteId].users[socket.id]);
+ var user = notes[noteId].users[socket.id];
+ if (!user) return;
+ updateUserData(socket, user);
emitOnlineUsers(socket);
});
@@ -856,7 +858,6 @@ function connection(socket) {
var out = {
users: users
};
- out = LZString.compressToUTF16(JSON.stringify(out));
socket.emit('online users', out);
});
@@ -871,26 +872,29 @@ function connection(socket) {
//received cursor focus
socket.on('cursor focus', function (data) {
var noteId = socket.noteId;
- if (!noteId || !notes[noteId]) return;
- users[socket.id].cursor = data;
- var out = buildUserOutData(users[socket.id]);
+ var user = users[socket.id];
+ if (!noteId || !notes[noteId] || !user) return;
+ user.cursor = data;
+ var out = buildUserOutData(user);
socket.broadcast.to(noteId).emit('cursor focus', out);
});
//received cursor activity
socket.on('cursor activity', function (data) {
var noteId = socket.noteId;
- if (!noteId || !notes[noteId]) return;
- users[socket.id].cursor = data;
- var out = buildUserOutData(users[socket.id]);
+ var user = users[socket.id];
+ if (!noteId || !notes[noteId] || !user) return;
+ user.cursor = data;
+ var out = buildUserOutData(user);
socket.broadcast.to(noteId).emit('cursor activity', out);
});
//received cursor blur
socket.on('cursor blur', function () {
var noteId = socket.noteId;
- if (!noteId || !notes[noteId]) return;
- users[socket.id].cursor = null;
+ var user = users[socket.id];
+ if (!noteId || !notes[noteId] || !user) return;
+ user.cursor = null;
var out = {
id: socket.id
};
@@ -905,4 +909,4 @@ function connection(socket) {
});
}
-module.exports = realtime; \ No newline at end of file
+module.exports = realtime;