3
3
const debug = require ( 'debug' )
4
4
const lp = require ( 'pull-length-prefixed' )
5
5
const pull = require ( 'pull-stream' )
6
- const setImmediate = require ( 'async/setImmediate' )
6
+ const waterfall = require ( 'async/waterfall' )
7
+ const each = require ( 'async/each' )
7
8
8
9
const Message = require ( '../../types/message' )
9
10
const CONSTANTS = require ( '../../constants' )
@@ -99,24 +100,39 @@ class Network {
99
100
this . bitswap . _onPeerDisconnected ( peerInfo . id )
100
101
}
101
102
102
- // Connect to the given peer
103
103
connectTo ( peerId , callback ) {
104
- const done = ( err ) => setImmediate ( ( ) => callback ( err ) )
105
-
106
104
if ( ! this . _running ) {
107
- return done ( new Error ( 'No running network' ) )
105
+ return callback ( new Error ( 'No running network' ) )
108
106
}
109
107
110
- // NOTE: For now, all this does is ensure that we are
111
- // connected. Once we have Peer Routing, we will be able
112
- // to find the Peer
113
- if ( this . libp2p . swarm . muxedConns [ peerId . toB58String ( ) ] ) {
114
- done ( )
115
- } else {
116
- done ( new Error ( 'Could not connect to peer with peerId:' , peerId . toB58String ( ) ) )
117
- }
108
+ this . libp2p . dial ( peerId , ( err , conn ) => {
109
+ if ( err ) {
110
+ return callback ( err )
111
+ }
112
+
113
+ pull ( pull . empty , conn )
114
+ callback ( )
115
+ } )
116
+ }
117
+
118
+ findProviders ( cid , maxProviders , callback ) {
119
+ this . libp2p . dht . findNProviders ( cid , CONSTANTS . providerRequestTimeout , maxProviders , callback )
120
+ }
121
+
122
+ findAndConnect ( cid , maxProviders , callback ) {
123
+ waterfall ( [
124
+ ( cb ) => this . findProviders ( cid , maxProviders , cb ) ,
125
+ ( provs , cb ) => each ( provs , ( p , cb ) => {
126
+ this . connectTo ( p , cb )
127
+ } )
128
+ ] , callback )
129
+ }
130
+
131
+ provide ( cid , callback ) {
132
+ this . libp2p . dht . provide ( )
118
133
}
119
134
135
+ // Connect to the given peer
120
136
// Send the given msg (instance of Message) to the given peer
121
137
sendMessage ( peerId , msg , callback ) {
122
138
if ( ! this . _running ) {
@@ -125,14 +141,8 @@ class Network {
125
141
126
142
const stringId = peerId . toB58String ( )
127
143
log ( 'sendMessage to %s' , stringId , msg )
128
- let peerInfo
129
- try {
130
- peerInfo = this . peerBook . get ( stringId )
131
- } catch ( err ) {
132
- return callback ( err )
133
- }
134
144
135
- this . _dialPeer ( peerInfo , ( err , conn , protocol ) => {
145
+ this . _dialPeer ( peerId , ( err , conn , protocol ) => {
136
146
if ( err ) {
137
147
return callback ( err )
138
148
}
@@ -157,14 +167,14 @@ class Network {
157
167
} )
158
168
}
159
169
160
- _dialPeer ( peerInfo , callback ) {
170
+ _dialPeer ( peer , callback ) {
161
171
// dialByPeerInfo throws if no network is there
162
172
try {
163
173
// Attempt Bitswap 1.1.0
164
- this . libp2p . dial ( peerInfo , BITSWAP110 , ( err , conn ) => {
174
+ this . libp2p . dial ( peer , BITSWAP110 , ( err , conn ) => {
165
175
if ( err ) {
166
176
// Attempt Bitswap 1.0.0
167
- this . libp2p . dial ( peerInfo , BITSWAP100 , ( err , conn ) => {
177
+ this . libp2p . dial ( peer , BITSWAP100 , ( err , conn ) => {
168
178
if ( err ) {
169
179
return callback ( err )
170
180
}
0 commit comments