@@ -125,13 +125,9 @@ pub enum NetworkAction {
125
125
value : Vec < u8 > ,
126
126
output : oneshot:: Sender < Result < ( ) , NetworkError > > ,
127
127
} ,
128
- RegisterTopic {
129
- topic_hash : TopicHash ,
130
- output : mpsc:: Sender < ( GossipsubMessage , Arc < Peer > ) > ,
131
- } ,
132
128
Subscribe {
133
129
topic_name : & ' static str ,
134
- output : oneshot :: Sender < TopicHash > ,
130
+ output : mpsc :: Sender < ( GossipsubMessage , PeerId ) > ,
135
131
} ,
136
132
Publish {
137
133
topic_name : & ' static str ,
@@ -144,8 +140,7 @@ pub enum NetworkAction {
144
140
struct TaskState {
145
141
dht_puts : HashMap < QueryId , oneshot:: Sender < Result < ( ) , NetworkError > > > ,
146
142
dht_gets : HashMap < QueryId , oneshot:: Sender < Result < Vec < u8 > , NetworkError > > > ,
147
- gossip_sub : HashMap < TopicHash , oneshot:: Sender < TopicHash > > ,
148
- gossip_topics : HashMap < TopicHash , mpsc:: Sender < ( GossipsubMessage , Arc < Peer > ) > > ,
143
+ gossip_topics : HashMap < TopicHash , mpsc:: Sender < ( GossipsubMessage , PeerId ) > > ,
149
144
}
150
145
151
146
pub struct Network {
@@ -306,7 +301,7 @@ impl Network {
306
301
for topic in msg. topics . iter ( ) {
307
302
if let Some ( output) = state. gossip_topics . get ( & topic) {
308
303
// let peer = Self::get_peer(peer_id).unwrap();
309
- // output.send((msg, peer));
304
+ output. send ( ( msg, peer) ) ;
310
305
} else {
311
306
log:: warn!( "Unknown topic hash: {:?}" , topic) ;
312
307
}
@@ -365,13 +360,10 @@ impl Network {
365
360
}
366
361
}
367
362
}
368
- NetworkAction :: RegisterTopic { topic_hash, output } => {
369
- state. gossip_topics . insert ( topic_hash, output) ;
370
- }
371
363
NetworkAction :: Subscribe { topic_name, output } => {
372
364
let topic = GossipsubTopic :: new ( topic_name. into ( ) ) ;
373
365
if swarm. gossipsub . subscribe ( topic. clone ( ) ) {
374
- state. gossip_sub . insert ( topic. sha256_hash ( ) , output) ;
366
+ state. gossip_topics . insert ( topic. sha256_hash ( ) , output) ;
375
367
} else {
376
368
log:: warn!( "Already subscribed to topic: {:?}" , topic_name) ;
377
369
drop ( output) ;
@@ -413,35 +405,22 @@ impl NetworkInterface for Network {
413
405
where
414
406
T : Topic + Sync ,
415
407
{
416
- let ( output_tx , output_rx ) = oneshot :: channel ( ) ;
408
+ let ( tx , rx ) = mpsc :: channel ( 16 ) ;
417
409
418
410
self . action_tx
419
411
. lock ( )
420
412
. await
421
413
. send ( NetworkAction :: Subscribe {
422
414
topic_name : topic. topic ( ) ,
423
- output : output_tx,
424
- } )
425
- . await ;
426
-
427
- let topic_hash = output_rx. await . expect ( "Already subscribed to topic" ) ;
428
- let ( tx, rx) = mpsc:: channel ( 16 ) ;
429
-
430
- self . action_tx
431
- . lock ( )
432
- . await
433
- . send ( NetworkAction :: RegisterTopic {
434
- topic_hash,
435
415
output : tx,
436
416
} )
437
- . await ;
438
-
439
- let test = rx. map ( |( msg, peer) |
440
- {
441
- let item = msg. data ;
442
- ( item , peer)
443
- } ) . into_inner ( ) ;
444
- Box :: new ( test)
417
+ . await
418
+ . expect ( "Couldn't subscribe to pubsub topic" ) ;
419
+
420
+ Box :: new ( rx. map ( |( msg, peer) | {
421
+ let item: <T as Topic >:: Item = Deserialize :: deserialize_from_vec ( & msg. data ) ;
422
+ ( item, peer)
423
+ } ) )
445
424
}
446
425
447
426
async fn publish < T > ( & self , topic : & T , item : <T as Topic >:: Item ) -> Result < ( ) , Self :: Error >
0 commit comments