diff options
Diffstat (limited to 'lib/realtime.js')
-rw-r--r-- | lib/realtime.js | 62 |
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; |