forked from buddycloud/buddycloud-webclient-discontinuted
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rsm_queue.coffee
38 lines (31 loc) · 1.28 KB
/
rsm_queue.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class exports.RSMQueue
constructor: (@name, @req_cb) ->
@queued = {}
add: (node, cb) ->
id = node.get('nodeid') or node.get('id')
if @queued.hasOwnProperty(id)
@queued[id].push cb
else
rsm_info = node["#{@name}_rsm"]
unless rsm_info?
node["#{@name}_rsm"] = {}
node.bind 'unsync', =>
# Reset RSM:
delete node["#{@name}_rsm"]
if rsm_info?.end_reached
cb? null, [], yes
else
@queued[id] = [cb]
console.warn "rsm", @name, id, rsm_info?.last
@req_cb id, rsm_info?.last, (err, results) =>
console.warn "rsm", @name, id, results?.length
if not results?.rsm?.last? or rsm_info?.last is results?.rsm?.last
node["#{@name}_rsm"] = { end_reached: yes }
end_reached = yes
else
node["#{@name}_rsm"] = { last: results?.rsm?.last }
end_reached = no
queued = @queued[id]
delete @queued[id]
for cb1 in queued
cb1?(err, results, end_reached)