|
1 | 1 | 'use strict' |
2 | 2 | // realtime |
3 | 3 | // external modules |
4 | | -var cookie = require('cookie') |
5 | | -var cookieParser = require('cookie-parser') |
6 | | -var url = require('url') |
7 | | -var async = require('async') |
8 | | -var randomcolor = require('randomcolor') |
9 | | -var Chance = require('chance') |
10 | | -var chance = new Chance() |
11 | | -var moment = require('moment') |
| 4 | +const cookie = require('cookie') |
| 5 | +const cookieParser = require('cookie-parser') |
| 6 | +const url = require('url') |
| 7 | +const async = require('async') |
| 8 | +const randomcolor = require('randomcolor') |
| 9 | +const Chance = require('chance') |
| 10 | +const chance = new Chance() |
| 11 | +const moment = require('moment') |
12 | 12 |
|
13 | 13 | const get = require('lodash/get') |
14 | 14 |
|
15 | 15 | // core |
16 | | -var config = require('./config') |
17 | | -var logger = require('./logger') |
18 | | -var history = require('./history') |
19 | | -var models = require('./models') |
| 16 | +const config = require('./config') |
| 17 | +const logger = require('./logger') |
| 18 | +const history = require('./history') |
| 19 | +const models = require('./models') |
20 | 20 |
|
21 | 21 | // ot |
22 | | -var ot = require('./ot') |
| 22 | +const ot = require('./ot') |
23 | 23 |
|
24 | | -const {RealtimeClientConnection} = require('./realtimeClientConnection') |
| 24 | +const { RealtimeClientConnection } = require('./realtimeClientConnection') |
| 25 | +const { UpdateDirtyNoteJob } = require('./realtimeUpdateDirtyNoteJob') |
25 | 26 |
|
26 | 27 | // public |
27 | | -var realtime = { |
| 28 | +const realtime = { |
28 | 29 | io: null, |
29 | 30 | onAuthorizeSuccess: onAuthorizeSuccess, |
30 | 31 | onAuthorizeFail: onAuthorizeFail, |
@@ -83,44 +84,20 @@ function emitCheck (note) { |
83 | 84 | // actions |
84 | 85 | var users = {} |
85 | 86 | var notes = {} |
86 | | -// update when the note is dirty |
87 | | -setInterval(function () { |
88 | | - async.each(Object.keys(notes), function (key, callback) { |
89 | | - var note = notes[key] |
90 | | - if (note.server.isDirty) { |
91 | | - if (config.debug) logger.info('updater found dirty note: ' + key) |
92 | | - note.server.isDirty = false |
93 | | - exports.updateNote(note, function (err, _note) { |
94 | | - // handle when note already been clean up |
95 | | - if (!notes[key] || !notes[key].server) return callback(null, null) |
96 | | - if (!_note) { |
97 | | - realtime.io.to(note.id).emit('info', { |
98 | | - code: 404 |
99 | | - }) |
100 | | - logger.error('note not found: ', note.id) |
101 | | - } |
102 | | - if (err || !_note) { |
103 | | - for (var i = 0, l = note.socks.length; i < l; i++) { |
104 | | - var sock = note.socks[i] |
105 | | - if (typeof sock !== 'undefined' && sock) { |
106 | | - setTimeout(function () { |
107 | | - sock.disconnect(true) |
108 | | - }, 0) |
109 | | - } |
110 | | - } |
111 | | - return callback(err, null) |
112 | | - } |
113 | | - note.updatetime = moment(_note.lastchangeAt).valueOf() |
114 | | - emitCheck(note) |
115 | | - return callback(null, null) |
| 87 | + |
| 88 | +const updateDirtyNoteJob = new UpdateDirtyNoteJob(realtime) |
| 89 | +updateDirtyNoteJob.start(realtime) |
| 90 | + |
| 91 | +function disconnectSocketOnNote (note) { |
| 92 | + note.socks.forEach((sock) => { |
| 93 | + if (sock) { |
| 94 | + sock.emit('delete') |
| 95 | + setImmediate(() => { |
| 96 | + sock.disconnect(true) |
116 | 97 | }) |
117 | | - } else { |
118 | | - return callback(null, null) |
119 | 98 | } |
120 | | - }, function (err) { |
121 | | - if (err) return logger.error('updater error', err) |
122 | 99 | }) |
123 | | -}, 1000) |
| 100 | +} |
124 | 101 |
|
125 | 102 | function updateNote (note, callback) { |
126 | 103 | models.Note.findOne({ |
@@ -858,6 +835,9 @@ exports.checkViewPermission = checkViewPermission |
858 | 835 | exports.getNoteFromNotePool = getNoteFromNotePool |
859 | 836 | exports.getUserFromUserPool = getUserFromUserPool |
860 | 837 | exports.buildUserOutData = buildUserOutData |
| 838 | +exports.getNotePool = getNotePool |
| 839 | +exports.emitCheck = emitCheck |
| 840 | +exports.disconnectSocketOnNote = disconnectSocketOnNote |
861 | 841 | exports.notes = notes |
862 | 842 | exports.users = users |
863 | 843 | exports.disconnectSocketQueue = disconnectSocketQueue |
0 commit comments