@@ -53,6 +53,7 @@ use libp2p::{
53
53
swarm:: SwarmEvent ,
54
54
NetworkBehaviour , PeerId , Swarm ,
55
55
} ;
56
+ use libp2p_kad:: GetProvidersOk ;
56
57
use std:: error:: Error ;
57
58
58
59
#[ async_std:: main]
@@ -110,147 +111,147 @@ async fn main() -> Result<(), Box<dyn Error>> {
110
111
// Kick it off.
111
112
loop {
112
113
select ! {
113
- line = stdin. select_next_some( ) => handle_input_line( & mut swarm. behaviour_mut( ) . kademlia, line. expect( "Stdin not to close" ) ) ,
114
- event = swarm. select_next_some( ) => match event {
115
- SwarmEvent :: NewListenAddr { address, .. } => {
116
- println!( "Listening in {:?}" , address) ;
117
- } ,
118
- SwarmEvent :: Behaviour ( MyBehaviourEvent :: Mdns ( MdnsEvent :: Discovered ( list) ) ) => {
119
- for ( peer_id, multiaddr) in list {
120
- swarm. behaviour_mut( ) . kademlia. add_address( & peer_id, multiaddr) ;
114
+ line = stdin. select_next_some( ) => handle_input_line( & mut swarm. behaviour_mut( ) . kademlia, line. expect( "Stdin not to close" ) ) ,
115
+ event = swarm. select_next_some( ) => match event {
116
+ SwarmEvent :: NewListenAddr { address, .. } => {
117
+ println!( "Listening in {:?}" , address) ;
118
+ } ,
119
+ SwarmEvent :: Behaviour ( MyBehaviourEvent :: Mdns ( MdnsEvent :: Discovered ( list) ) ) => {
120
+ for ( peer_id, multiaddr) in list {
121
+ swarm. behaviour_mut( ) . kademlia. add_address( & peer_id, multiaddr) ;
122
+ }
121
123
}
122
- }
123
- SwarmEvent :: Behaviour ( MyBehaviourEvent :: Kademlia ( KademliaEvent :: OutboundQueryCompleted { result, ..} ) ) => {
124
- match result {
125
- QueryResult :: GetProviders ( Ok ( ok) ) => {
126
- for peer in ok. providers {
124
+ SwarmEvent :: Behaviour ( MyBehaviourEvent :: Kademlia ( KademliaEvent :: OutboundQueryProgressed { result, ..} ) ) => {
125
+ match result {
126
+ QueryResult :: GetProviders ( Ok ( GetProvidersOk { key, providers, .. } ) ) => {
127
+ for peer in providers {
128
+ println!(
129
+ "Peer {:?} provides key {:?}" ,
130
+ peer,
131
+ std:: str :: from_utf8( key. as_ref( ) ) . unwrap( )
132
+ ) ;
133
+ }
134
+ }
135
+ QueryResult :: GetProviders ( Err ( err) ) => {
136
+ eprintln!( "Failed to get providers: {:?}" , err) ;
137
+ }
138
+ QueryResult :: GetRecord ( Ok ( ok) ) => {
139
+ for PeerRecord {
140
+ record: Record { key, value, .. } ,
141
+ ..
142
+ } in ok. records
143
+ {
144
+ println!(
145
+ "Got record {:?} {:?}" ,
146
+ std:: str :: from_utf8( key. as_ref( ) ) . unwrap( ) ,
147
+ std:: str :: from_utf8( & value) . unwrap( ) ,
148
+ ) ;
149
+ }
150
+ }
151
+ QueryResult :: GetRecord ( Err ( err) ) => {
152
+ eprintln!( "Failed to get record: {:?}" , err) ;
153
+ }
154
+ QueryResult :: PutRecord ( Ok ( PutRecordOk { key } ) ) => {
127
155
println!(
128
- "Peer {:?} provides key {:?}" ,
129
- peer,
130
- std:: str :: from_utf8( ok. key. as_ref( ) ) . unwrap( )
156
+ "Successfully put record {:?}" ,
157
+ std:: str :: from_utf8( key. as_ref( ) ) . unwrap( )
131
158
) ;
132
159
}
133
- }
134
- QueryResult :: GetProviders ( Err ( err) ) => {
135
- eprintln!( "Failed to get providers: {:?}" , err) ;
136
- }
137
- QueryResult :: GetRecord ( Ok ( ok) ) => {
138
- for PeerRecord {
139
- record: Record { key, value, .. } ,
140
- ..
141
- } in ok. records
142
- {
160
+ QueryResult :: PutRecord ( Err ( err) ) => {
161
+ eprintln!( "Failed to put record: {:?}" , err) ;
162
+ }
163
+ QueryResult :: StartProviding ( Ok ( AddProviderOk { key } ) ) => {
143
164
println!(
144
- "Got record {:?} {:?}" ,
145
- std:: str :: from_utf8( key. as_ref( ) ) . unwrap( ) ,
146
- std:: str :: from_utf8( & value) . unwrap( ) ,
165
+ "Successfully put provider record {:?}" ,
166
+ std:: str :: from_utf8( key. as_ref( ) ) . unwrap( )
147
167
) ;
148
168
}
169
+ QueryResult :: StartProviding ( Err ( err) ) => {
170
+ eprintln!( "Failed to put provider record: {:?}" , err) ;
171
+ }
172
+ _ => { }
149
173
}
150
- QueryResult :: GetRecord ( Err ( err) ) => {
151
- eprintln!( "Failed to get record: {:?}" , err) ;
152
- }
153
- QueryResult :: PutRecord ( Ok ( PutRecordOk { key } ) ) => {
154
- println!(
155
- "Successfully put record {:?}" ,
156
- std:: str :: from_utf8( key. as_ref( ) ) . unwrap( )
157
- ) ;
158
- }
159
- QueryResult :: PutRecord ( Err ( err) ) => {
160
- eprintln!( "Failed to put record: {:?}" , err) ;
161
- }
162
- QueryResult :: StartProviding ( Ok ( AddProviderOk { key } ) ) => {
163
- println!(
164
- "Successfully put provider record {:?}" ,
165
- std:: str :: from_utf8( key. as_ref( ) ) . unwrap( )
166
- ) ;
167
- }
168
- QueryResult :: StartProviding ( Err ( err) ) => {
169
- eprintln!( "Failed to put provider record: {:?}" , err) ;
170
- }
171
- _ => { }
172
174
}
175
+ _ => { }
173
176
}
174
- _ => { }
175
- }
176
177
}
177
178
}
178
- }
179
179
180
- fn handle_input_line ( kademlia : & mut Kademlia < MemoryStore > , line : String ) {
181
- let mut args = line. split ( ' ' ) ;
180
+ fn handle_input_line ( kademlia : & mut Kademlia < MemoryStore > , line : String ) {
181
+ let mut args = line. split ( ' ' ) ;
182
182
183
- match args. next ( ) {
184
- Some ( "GET" ) => {
185
- let key = {
186
- match args. next ( ) {
187
- Some ( key) => Key :: new ( & key) ,
188
- None => {
189
- eprintln ! ( "Expected key" ) ;
190
- return ;
183
+ match args. next ( ) {
184
+ Some ( "GET" ) => {
185
+ let key = {
186
+ match args. next ( ) {
187
+ Some ( key) => Key :: new ( & key) ,
188
+ None => {
189
+ eprintln ! ( "Expected key" ) ;
190
+ return ;
191
+ }
191
192
}
192
- }
193
- } ;
194
- kademlia . get_record ( key , Quorum :: One ) ;
195
- }
196
- Some ( "GET_PROVIDERS" ) => {
197
- let key = {
198
- match args . next ( ) {
199
- Some ( key ) => Key :: new ( & key ) ,
200
- None => {
201
- eprintln ! ( "Expected key" ) ;
202
- return ;
193
+ } ;
194
+ kademlia . get_record ( key , Quorum :: One ) ;
195
+ }
196
+ Some ( "GET_PROVIDERS" ) => {
197
+ let key = {
198
+ match args . next ( ) {
199
+ Some ( key ) => Key :: new ( & key ) ,
200
+ None => {
201
+ eprintln ! ( "Expected key" ) ;
202
+ return ;
203
+ }
203
204
}
204
- }
205
- } ;
206
- kademlia . get_providers ( key ) ;
207
- }
208
- Some ( "PUT" ) => {
209
- let key = {
210
- match args . next ( ) {
211
- Some ( key ) => Key :: new ( & key ) ,
212
- None => {
213
- eprintln ! ( "Expected key" ) ;
214
- return ;
205
+ } ;
206
+ kademlia . get_providers ( key ) ;
207
+ }
208
+ Some ( "PUT" ) => {
209
+ let key = {
210
+ match args . next ( ) {
211
+ Some ( key ) => Key :: new ( & key ) ,
212
+ None => {
213
+ eprintln ! ( "Expected key" ) ;
214
+ return ;
215
+ }
215
216
}
216
- }
217
- } ;
218
- let value = {
219
- match args . next ( ) {
220
- Some ( value ) => value . as_bytes ( ) . to_vec ( ) ,
221
- None => {
222
- eprintln ! ( "Expected value" ) ;
223
- return ;
217
+ } ;
218
+ let value = {
219
+ match args . next ( ) {
220
+ Some ( value ) => value . as_bytes ( ) . to_vec ( ) ,
221
+ None => {
222
+ eprintln ! ( "Expected value" ) ;
223
+ return ;
224
+ }
224
225
}
225
- }
226
- } ;
227
- let record = Record {
228
- key ,
229
- value ,
230
- publisher : None ,
231
- expires : None ,
232
- } ;
233
- kademlia
234
- . put_record ( record, Quorum :: One )
235
- . expect ( "Failed to store record locally." ) ;
236
- }
237
- Some ( "PUT_PROVIDER" ) => {
238
- let key = {
239
- match args . next ( ) {
240
- Some ( key ) => Key :: new ( & key ) ,
241
- None => {
242
- eprintln ! ( "Expected key" ) ;
243
- return ;
226
+ } ;
227
+ let record = Record {
228
+ key ,
229
+ value ,
230
+ publisher : None ,
231
+ expires : None ,
232
+ } ;
233
+ kademlia
234
+ . put_record ( record , Quorum :: One )
235
+ . expect ( "Failed to store record locally." ) ;
236
+ }
237
+ Some ( "PUT_PROVIDER" ) => {
238
+ let key = {
239
+ match args . next ( ) {
240
+ Some ( key ) => Key :: new ( & key ) ,
241
+ None => {
242
+ eprintln ! ( "Expected key" ) ;
243
+ return ;
244
+ }
244
245
}
245
- }
246
- } ;
246
+ } ;
247
247
248
- kademlia
249
- . start_providing ( key)
250
- . expect ( "Failed to start providing key" ) ;
251
- }
252
- _ => {
253
- eprintln ! ( "expected GET, GET_PROVIDERS, PUT or PUT_PROVIDER" ) ;
248
+ kademlia
249
+ . start_providing ( key)
250
+ . expect ( "Failed to start providing key" ) ;
251
+ }
252
+ _ => {
253
+ eprintln ! ( "expected GET, GET_PROVIDERS, PUT or PUT_PROVIDER" ) ;
254
+ }
254
255
}
255
256
}
256
257
}
0 commit comments