Commit 5968fb325860b8675c105c04324b66c5858d36e5
sbot: use `gossip.changes` instead of polling `gossip.peers`
Matt McKegg committed on 6/30/2017, 10:21:40 AMParent: 1a60fe5ccf3b5627afee9860687652a1478e4f3a
Files changed
sbot.js | changed |
sbot.js | ||
---|---|---|
@@ -1,13 +1,12 @@ | ||
1 | 1 … | var pull = require('pull-stream') |
2 | 2 … | var defer = require('pull-defer') |
3 | -var { onceTrue } = require('mutant') | |
3 … | +var { Value, onceTrue, watch, Set: MutantSet } = require('mutant') | |
4 | 4 … | var ref = require('ssb-ref') |
5 | 5 … | var Reconnect = require('pull-reconnect') |
6 | 6 … | var createClient = require('ssb-client') |
7 | 7 … | var createFeed = require('ssb-feed') |
8 | 8 … | var nest = require('depnest') |
9 | -var Value = require('mutant/value') | |
10 | 9 … | var ssbKeys = require('ssb-keys') |
11 | 10 … | |
12 | 11 … | exports.needs = nest({ |
13 | 12 … | 'config.sync.load': 'first', |
@@ -52,13 +51,11 @@ | ||
52 | 51 … | |
53 | 52 … | var sbot = null |
54 | 53 … | var connection = Value() |
55 | 54 … | var connectionStatus = Value() |
56 | - var connectedPeers = Value([]) | |
57 | - var localPeers = Value([]) | |
55 … | + var connectedPeers = MutantSet() | |
56 … | + var localPeers = MutantSet() | |
58 | 57 … | |
59 | - setInterval(refreshPeers, 1e3) | |
60 | - | |
61 | 58 … | var rec = Reconnect(function (isConn) { |
62 | 59 … | function notify (value) { |
63 | 60 … | isConn(value); connectionStatus.set(value) |
64 | 61 … | } |
@@ -76,9 +73,8 @@ | ||
76 | 73 … | }) |
77 | 74 … | |
78 | 75 … | connection.set(sbot) |
79 | 76 … | notify() |
80 | - refreshPeers() | |
81 | 77 … | }) |
82 | 78 … | }) |
83 | 79 … | |
84 | 80 … | var internal = { |
@@ -89,8 +85,38 @@ | ||
89 | 85 … | sbot.add(msg, cb) |
90 | 86 … | }) |
91 | 87 … | } |
92 | 88 … | |
89 … | + watch(connection, (sbot) => { | |
90 … | + if (sbot) { | |
91 … | + sbot.gossip.peers((err, peers) => { | |
92 … | + if (err) return console.error(err) | |
93 … | + connectedPeers.set(peers.filter(x => x.state === 'connected').map(x => x.key)) | |
94 … | + localPeers.set(peers.filter(x => x.source === 'local').map(x => x.key)) | |
95 … | + }) | |
96 … | + pull( | |
97 … | + sbot.gossip.changes(), | |
98 … | + pull.drain(data => { | |
99 … | + if (data.peer) { | |
100 … | + if (data.type === 'remove') { | |
101 … | + connectedPeers.delete(data.peer.key) | |
102 … | + localPeers.delete(data.peer.key) | |
103 … | + } else { | |
104 … | + if (data.peer.source === 'local') { | |
105 … | + localPeers.add(data.peer.key) | |
106 … | + } | |
107 … | + if (data.peer.state === 'connected') { | |
108 … | + connectedPeers.add(data.peer.key) | |
109 … | + } else { | |
110 … | + connectedPeers.delete(data.peer.key) | |
111 … | + } | |
112 … | + } | |
113 … | + } | |
114 … | + }) | |
115 … | + ) | |
116 … | + } | |
117 … | + }) | |
118 … | + | |
93 | 119 … | var feed = createFeed(internal, keys, {remote: true}) |
94 | 120 … | |
95 | 121 … | return { |
96 | 122 … | sbot: { |
@@ -223,18 +249,8 @@ | ||
223 | 249 … | // cache[msg.key] = msg.value |
224 | 250 … | // api.sbot.hook.feed(msg) |
225 | 251 … | } |
226 | 252 … | } |
227 | - | |
228 | - function refreshPeers () { | |
229 | - if (sbot) { | |
230 | - sbot.gossip.peers((err, peers) => { | |
231 | - if (err) return console.error(err) | |
232 | - connectedPeers.set(peers.filter(x => x.state === 'connected').map(x => x.key)) | |
233 | - localPeers.set(peers.filter(x => x.source === 'local').map(x => x.key)) | |
234 | - }) | |
235 | - } | |
236 | - } | |
237 | 253 … | } |
238 | 254 … | |
239 | 255 … | function Hash (onHash) { |
240 | 256 … | var buffers = [] |
Built with git-ssb-web