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