Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 686099d

Browse files
working \o/
1 parent df06062 commit 686099d

File tree

12 files changed

+151
-236
lines changed

12 files changed

+151
-236
lines changed

gulpfile.js

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ const gulp = require('gulp')
44
const parallel = require('async/parallel')
55
const series = require('async/series')
66
const createTempRepo = require('./test/utils/create-repo-node.js')
7-
const IPFS = require('./src/core')
87
const HTTPAPI = require('./src/http-api')
98
const leftPad = require('left-pad')
109

@@ -16,31 +15,21 @@ let nodes = []
1615
function spawnDaemon (num, callback) {
1716
num = leftPad(num, 3, 0)
1817

19-
// const node = new IPFS({
20-
// repo: createTempRepo(),
21-
// init: {
22-
// bits: 1024
23-
// },
24-
// start: false,
25-
// EXPERIMENTAL: {
26-
// pubsub: true
27-
// },
28-
const config = {
29-
Addresses: {
30-
Swarm: [
31-
`/ip4/127.0.0.1/tcp/10${num}`,
32-
`/ip4/127.0.0.1/tcp/20${num}/ws`
33-
],
34-
API: `/ip4/127.0.0.1/tcp/31${num}`,
35-
Gateway: `/ip4/127.0.0.1/tcp/32${num}`
36-
},
37-
Discovery: {
38-
MDNS: {
39-
Enabled: false
40-
}
18+
const config = {
19+
Addresses: {
20+
Swarm: [
21+
`/ip4/127.0.0.1/tcp/10${num}`,
22+
`/ip4/127.0.0.1/tcp/20${num}/ws`
23+
],
24+
API: `/ip4/127.0.0.1/tcp/31${num}`,
25+
Gateway: `/ip4/127.0.0.1/tcp/32${num}`
26+
},
27+
Discovery: {
28+
MDNS: {
29+
Enabled: false
4130
}
4231
}
43-
// })
32+
}
4433

4534
const daemon = new HTTPAPI(createTempRepo(), config)
4635
nodes.push(daemon)

src/cli/bin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ aliases.forEach((alias) => {
3131
const args = process.argv.slice(2)
3232

3333
// Need to skip to avoid locking the daemon
34-
if (args[0] === 'daemon') {
34+
if (args[0] === 'daemon' || args[0] === 'init') {
3535
return cli.help().strict(false).completion().parse(args)
3636
}
3737

src/cli/utils.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ exports.getIPFS = (callback) => {
6060
throw err
6161
})
6262

63-
callback(null, node, cleanup)
63+
node.once('ready', () => {
64+
callback(null, node, cleanup)
65+
})
6466
}
6567

6668
exports.getRepoPath = () => {

src/core/boot.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ module.exports = (self) => {
2424
(cb) => self._repo.exists(cb),
2525
(exists, cb) => {
2626
if (exists && !repoOpen) {
27-
return self._repo.open(cb)
27+
return series([
28+
(cb) => self._repo.open(cb),
29+
(cb) => self.preStart(cb)
30+
], cb)
2831
}
2932
cb()
3033
}
@@ -35,6 +38,7 @@ module.exports = (self) => {
3538
if (err) {
3639
self.emit('error', err)
3740
}
41+
self.emit('ready')
3842
self.log('boot:done', err)
3943
}
4044

@@ -61,10 +65,10 @@ module.exports = (self) => {
6165

6266
if (setConfig) {
6367
self.log('boot:setConfig')
64-
// if (!hasRepo) {
65-
// console.log('WARNING, trying to set config on uninitialized repo, maybe forgot to set "init: true"')
66-
// } else {
67-
tasks.push((cb) => {
68+
if (!hasRepo) {
69+
console.log('WARNING, trying to set config on uninitialized repo, maybe forgot to set "init: true"')
70+
} else {
71+
tasks.push((cb) => {
6872
waterfall([
6973
(cb) => self.config.get(cb),
7074
(config, cb) => {
@@ -73,17 +77,17 @@ module.exports = (self) => {
7377
}
7478
], cb)
7579
})
76-
// }
80+
}
7781
}
7882

7983
if (doStart) {
8084
self.log('boot:doStart')
81-
// if (!hasRepo) {
82-
// console.log('WARNING, trying to start ipfs node on uninitialized repo, maybe forgot to set "init: true"')
83-
// return done(new Error('Uninitalized repo'))
84-
// } else {
85+
if (!hasRepo) {
86+
console.log('WARNING, trying to start ipfs node on uninitialized repo, maybe forgot to set "init: true"')
87+
return done(new Error('Uninitalized repo'))
88+
} else {
8589
tasks.push((cb) => self.start(cb))
86-
// }
90+
}
8791
}
8892

8993
series(tasks, done)

src/core/components/init.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@ module.exports = function init (self) {
1414
opts = {}
1515
}
1616

17+
const done = (err, res) => {
18+
if (err) {
19+
self.emit('error', err)
20+
return callback(err)
21+
}
22+
23+
self.state.initialized()
24+
self.emit('init')
25+
callback(null, res)
26+
}
27+
28+
if (self.state.state !== 'uninitalized') {
29+
return done(new Error('Not able to init from state: ' + self.state.state))
30+
}
31+
1732
self.state.init()
1833
self.log('init')
1934

@@ -74,16 +89,6 @@ module.exports = function init (self) {
7489
cb(null, true)
7590
})
7691
}
77-
], (err, res) => {
78-
if (err) {
79-
self.log('init failed', err)
80-
return callback(err)
81-
}
82-
self._state.daemon = 'initialized'
83-
self.emit('init')
84-
self.log('init done')
85-
self.state.initialized()
86-
callback(null, res)
87-
})
92+
], done)
8893
}
8994
}

src/core/components/pre-start.js

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,45 +11,33 @@ const mafmt = require('mafmt')
1111
*/
1212
module.exports = function preStart (self) {
1313
return (callback) => {
14-
if (self._repo.closed) {
15-
if (self._awaitInit) {
16-
self._repo.once('init', start)
17-
} else {
18-
self._repo.once('open', start)
14+
self.log('pre-start')
15+
16+
waterfall([
17+
(cb) => self._repo.config.get(cb),
18+
(config, cb) => {
19+
const privKey = config.Identity.PrivKey
20+
21+
peerId.createFromPrivKey(privKey, (err, id) => {
22+
cb(err, config, id)
23+
})
24+
},
25+
(config, id, cb) => {
26+
self._peerInfo = new PeerInfo(id)
27+
28+
config.Addresses.Swarm.forEach((addr) => {
29+
let ma = multiaddr(addr)
30+
31+
if (!mafmt.IPFS.matches(ma)) {
32+
ma = ma.encapsulate('/ipfs/' +
33+
self._peerInfo.id.toB58String())
34+
}
35+
36+
self._peerInfo.multiaddr.add(ma)
37+
})
38+
39+
cb()
1940
}
20-
} else {
21-
start()
22-
}
23-
24-
function start () {
25-
self.log('pre-start')
26-
27-
waterfall([
28-
(cb) => self._repo.config.get(cb),
29-
(config, cb) => {
30-
const privKey = config.Identity.PrivKey
31-
32-
peerId.createFromPrivKey(privKey, (err, id) => {
33-
cb(err, config, id)
34-
})
35-
},
36-
(config, id, cb) => {
37-
self._peerInfo = new PeerInfo(id)
38-
39-
config.Addresses.Swarm.forEach((addr) => {
40-
let ma = multiaddr(addr)
41-
42-
if (!mafmt.IPFS.matches(ma)) {
43-
ma = ma.encapsulate('/ipfs/' +
44-
self._peerInfo.id.toB58String())
45-
}
46-
47-
self._peerInfo.multiaddr.add(ma)
48-
})
49-
50-
cb()
51-
}
52-
], callback)
53-
}
41+
], callback)
5442
}
5543
}

src/core/components/start.js

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,59 @@
33
const series = require('async/series')
44
const Bitswap = require('ipfs-bitswap')
55
const FloodSub = require('libp2p-floodsub')
6-
const once = require('once')
76

87
module.exports = (self) => {
98
return (callback) => {
10-
callback = once(callback) || function noop () {}
11-
self.once('error', callback)
12-
self.once('start', callback)
9+
callback = callback || function noop () {}
1310

14-
if (self.state.state !== 'stopped') {
15-
self.log('sub', self.state.state)
16-
const sub = self.state.on('stopped', () => {
17-
sub.off()
18-
start()
19-
})
20-
} else {
21-
start()
11+
const done = (err) => {
12+
if (err) {
13+
self.emit('error', err)
14+
return callback(err)
15+
}
16+
17+
self.state.started()
18+
self.emit('start')
19+
callback()
2220
}
2321

24-
function start () {
25-
self.log('starting')
26-
self.state.start()
27-
const done = (err) => {
28-
if (err) {
29-
return self.emit('error', err)
30-
}
22+
if (self.state.state !== 'stopped') {
23+
return done(new Error('Not able to start from state: ' + self.state.state))
24+
}
3125

32-
self.state.started()
33-
self.emit('start')
34-
}
26+
self.log('starting')
27+
self.state.start()
3528

36-
series([
37-
(cb) => {
38-
if (self._repo.closed) {
39-
self._repo.open(cb)
40-
} else {
41-
cb()
42-
}
43-
},
44-
(cb) => self.preStart(cb),
45-
(cb) => self.libp2p.start(cb)
46-
], (err) => {
47-
if (err) {
48-
return done(err)
29+
series([
30+
(cb) => {
31+
if (self._repo.closed) {
32+
self._repo.open(cb)
33+
} else {
34+
cb()
4935
}
36+
},
37+
(cb) => self.preStart(cb),
38+
(cb) => self.libp2p.start(cb)
39+
], (err) => {
40+
if (err) {
41+
return done(err)
42+
}
5043

51-
self._bitswap = new Bitswap(
52-
self._libp2pNode,
53-
self._repo.blockstore,
54-
self._peerInfoBook
55-
)
44+
self._bitswap = new Bitswap(
45+
self._libp2pNode,
46+
self._repo.blockstore,
47+
self._peerInfoBook
48+
)
5649

57-
self._bitswap.start()
58-
self._blockService.goOnline(self._bitswap)
50+
self._bitswap.start()
51+
self._blockService.goOnline(self._bitswap)
5952

60-
if (self._options.EXPERIMENTAL.pubsub) {
61-
self._pubsub = new FloodSub(self._libp2pNode)
62-
self._pubsub.start(done)
63-
} else {
64-
done()
65-
}
66-
})
67-
}
53+
if (self._options.EXPERIMENTAL.pubsub) {
54+
self._pubsub = new FloodSub(self._libp2pNode)
55+
self._pubsub.start(done)
56+
} else {
57+
done()
58+
}
59+
})
6860
}
6961
}

0 commit comments

Comments
 (0)