-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
109 lines (92 loc) · 2.7 KB
/
app.js
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
'use strict'
const IPFS = require('ipfs')
const Helpers = require('./helpers')
const $peerId = document.querySelector('#peer-id')
const $message = document.querySelector('#message')
const $msgs = document.querySelector('#msgs')
const $send = document.querySelector('#send')
const $peer = document.querySelector('#peer')
const $connect = document.querySelector('#connect')
const $pAddrs = document.querySelector('#peers-addrs')
const $room = document.querySelector('#room')
const $roomId = document.querySelector('#room-id')
let roomName = `default`
const fragment = window.location.hash.substr(1)
if (fragment) {
roomName = fragment
}
$pAddrs.value = ''
$room.innerText = roomName
const repo = () => {
return 'ipfs/pubsub-demo/' + Math.random()
}
const ipfs = new IPFS({
repo: repo(),
relay: {
enabled: true, // enable relay dialer/listener (STOP)
hop: {
enabled: true // make this node a relay (HOP)
}
},
EXPERIMENTAL: {
pubsub: true // enable pubsub
},
config: {
Bootstrap: []
}
})
const peersSet = new Set()
const helpers = Helpers(ipfs, peersSet)
const createRoom = helpers.createRoom
const sendMsg = helpers.sendMsg
const updatePeers = helpers.updatePeers
const updateAddrs = helpers.updateAddrs
ipfs.once('ready', () => ipfs.id((err, info) => {
if (err) { throw err }
console.log('IPFS node ready with id ' + info.id)
let room = createRoom(roomName)
$peerId.innerHTML = `<li>${info.id}</li>`
updateAddrs(info.addresses)
$send.addEventListener('click', () => {
sendMsg(room)
})
$room.addEventListener('dblclick', () => {
$room.setAttribute('style', 'display: none')
$roomId.setAttribute('style', 'display: inline')
})
$roomId.addEventListener('keyup', (event) => {
const kp = event.keyCode || event.which
if (kp === 13 && $roomId.value.length > 0) {
let name = $roomId.value
$room.innerText = name
$room.setAttribute('style', 'display: inline')
$roomId.setAttribute('style', 'display: none')
$roomId.value = ''
$msgs.innerHTML = ''
window.location.hash = name
room = createRoom(name)
peersSet.clear()
updatePeers(peersSet)
} else if (kp === 27) {
$roomId.value = ''
$room.setAttribute('style', 'display: inline')
$roomId.setAttribute('style', 'display: none')
}
})
$message.addEventListener('keyup', (event) => {
const kp = event.keyCode || event.which
if (kp === 13) {
sendMsg(room)
}
})
$connect.addEventListener('click', () => {
const peer = $peer.value
$peer.value = ''
ipfs.swarm.connect(peer, (err) => {
if (err) {
return console.error(err)
}
$pAddrs.innerHTML += `<li>${peer.trim()}</li>`
})
})
}))