git ssb

0+

alanz / patchwork



forked from Matt McKegg / patchwork

Tree: bc8a6a0724c1be92a17b4d3eaeeadc5c756aca4e

Files: bc8a6a0724c1be92a17b4d3eaeeadc5c756aca4e / lib / local-with-list.js

1568 bytesRaw
1// FROM: https://github.com/ssbc/scuttlebot/blob/master/plugins/local.js
2
3var broadcast = require('broadcast-stream')
4var ref = require('ssb-ref')
5var valid = require('scuttlebot/lib/validators')
6
7// local plugin
8// broadcasts the address:port:pubkey triple of the sbot server
9// on the LAN, using multicast UDP
10
11function isFunction (f) {
12 return 'function' === typeof f
13}
14
15module.exports = {
16 name: 'local',
17 version: '2.0.0',
18 manifest: {
19 list: 'sync'
20 },
21 init: function (sbot, config) {
22 var local = broadcast(config.port)
23 var lastSeen = {}
24 var localKeys = new Set()
25
26 setInterval(function () {
27 Object.keys(lastSeen).forEach((key) => {
28 if (Date.now() - lastSeen[key] < 10e3) {
29 localKeys.add(key)
30 } else {
31 localKeys.delete(key)
32 delete lastSeen[key]
33 }
34 })
35 }, 5e3)
36
37 local.on('data', function (buf) {
38 if (buf.loopback) return
39 var data = buf.toString()
40 var peer = ref.parseAddress(data)
41 if (peer) {
42 lastSeen[peer.key] = Date.now()
43 sbot.gossip.add(data, 'local')
44 }
45 })
46
47 setInterval(function () {
48 // broadcast self
49 // TODO: sign beacons, so that receipient can be confidant
50 // that is really your id.
51 // (which means they can update their peer table)
52 // Oh if this includes your local address,
53 // then it becomes unforgeable.
54 local.write(sbot.getAddress())
55 }, 1000)
56
57 return {
58 list: valid.sync(function () {
59 return Array.from(localKeys)
60 })
61 }
62 }
63}
64

Built with git-ssb-web