@@ -45,7 +45,7 @@ pub type TokioTcpTransport = GenTcpTransport<tokio::Tcp>;
45
45
use futures:: {
46
46
future:: { self , BoxFuture , Ready } ,
47
47
prelude:: * ,
48
- ready,
48
+ ready, stream :: FusedStream ,
49
49
} ;
50
50
use futures_timer:: Delay ;
51
51
use libp2p_core:: {
@@ -293,9 +293,9 @@ impl GenTcpConfig {
293
293
/// following example:
294
294
///
295
295
/// ```no_run
296
+ /// # use futures::StreamExt;
296
297
/// # use libp2p_core::transport::{ListenerId, TransportEvent};
297
298
/// # use libp2p_core::{Multiaddr, Transport};
298
- /// # use futures::{stream::StreamExt, future::poll_fn};
299
299
/// # use std::pin::Pin;
300
300
/// #[cfg(feature = "async-io")]
301
301
/// #[async_std::main]
@@ -307,7 +307,7 @@ impl GenTcpConfig {
307
307
///
308
308
/// let mut tcp1 = TcpTransport::new(GenTcpConfig::new().port_reuse(true));
309
309
/// tcp1.listen_on(ListenerId::new(1), listen_addr1.clone()).expect("listener");
310
- /// match poll_fn(|cx| Pin::new(&mut tcp1).poll(cx) ).await {
310
+ /// match tcp1.select_next_some( ).await {
311
311
/// TransportEvent::NewAddress { listen_addr, .. } => {
312
312
/// println!("Listening on {:?}", listen_addr);
313
313
/// let mut stream = tcp1.dial(listen_addr2.clone()).unwrap().await?;
@@ -318,7 +318,7 @@ impl GenTcpConfig {
318
318
///
319
319
/// let mut tcp2 = TcpTransport::new(GenTcpConfig::new().port_reuse(true));
320
320
/// tcp2.listen_on(ListenerId::new(1), listen_addr2).expect("listener");
321
- /// match poll_fn(|cx| Pin::new(&mut tcp2).poll(cx) ).await {
321
+ /// match tcp2.select_next_some( ).await {
322
322
/// TransportEvent::NewAddress { listen_addr, .. } => {
323
323
/// println!("Listening on {:?}", listen_addr);
324
324
/// let mut socket = tcp2.dial(listen_addr1).unwrap().await?;
@@ -550,6 +550,32 @@ where
550
550
}
551
551
}
552
552
553
+ impl < T > Stream for GenTcpTransport < T >
554
+ where
555
+ T : Provider + Send + ' static ,
556
+ T :: Listener : Unpin ,
557
+ T :: IfWatcher : Unpin ,
558
+ T :: Stream : Unpin ,
559
+ {
560
+ type Item = TransportEvent < <Self as Transport >:: ListenerUpgrade , <Self as Transport >:: Error > ;
561
+
562
+ fn poll_next ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Option < Self :: Item > > {
563
+ Transport :: poll ( self , cx) . map ( Some )
564
+ }
565
+ }
566
+ impl < T > FusedStream for GenTcpTransport < T >
567
+ where
568
+ T : Provider + Send + ' static ,
569
+ T :: Listener : Unpin ,
570
+ T :: IfWatcher : Unpin ,
571
+ T :: Stream : Unpin ,
572
+ {
573
+ fn is_terminated ( & self ) -> bool {
574
+ false
575
+ }
576
+ }
577
+
578
+
553
579
#[ derive( Debug ) ]
554
580
pub enum TcpTransportEvent < S > {
555
581
/// The transport is listening on a new additional [`Multiaddr`].
@@ -855,7 +881,7 @@ fn ip_to_multiaddr(ip: IpAddr, port: u16) -> Multiaddr {
855
881
#[ cfg( test) ]
856
882
mod tests {
857
883
use super :: * ;
858
- use futures:: { channel:: mpsc, future :: poll_fn } ;
884
+ use futures:: channel:: mpsc;
859
885
860
886
#[ test]
861
887
fn multiaddr_to_tcp_conversion ( ) {
@@ -914,7 +940,7 @@ mod tests {
914
940
let mut tcp = GenTcpTransport :: < T > :: new ( GenTcpConfig :: new ( ) ) ;
915
941
tcp. listen_on ( ListenerId :: new ( 1 ) , addr) . unwrap ( ) ;
916
942
loop {
917
- match poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx ) ) . await {
943
+ match tcp. select_next_some ( ) . await {
918
944
TransportEvent :: NewAddress { listen_addr, .. } => {
919
945
ready_tx. send ( listen_addr) . await . unwrap ( ) ;
920
946
}
@@ -984,7 +1010,7 @@ mod tests {
984
1010
tcp. listen_on ( ListenerId :: new ( 1 ) , addr) . unwrap ( ) ;
985
1011
986
1012
loop {
987
- match poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx ) ) . await {
1013
+ match tcp. select_next_some ( ) . await {
988
1014
TransportEvent :: NewAddress { listen_addr, .. } => {
989
1015
let mut iter = listen_addr. iter ( ) ;
990
1016
match iter. next ( ) . expect ( "ip address" ) {
@@ -1052,7 +1078,7 @@ mod tests {
1052
1078
let mut tcp = GenTcpTransport :: < T > :: new ( GenTcpConfig :: new ( ) ) ;
1053
1079
tcp. listen_on ( ListenerId :: new ( 1 ) , addr) . unwrap ( ) ;
1054
1080
loop {
1055
- match poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx ) ) . await {
1081
+ match tcp. select_next_some ( ) . await {
1056
1082
TransportEvent :: NewAddress { listen_addr, .. } => {
1057
1083
ready_tx. send ( listen_addr) . await . ok ( ) ;
1058
1084
}
@@ -1073,7 +1099,7 @@ mod tests {
1073
1099
let dest_addr = ready_rx. next ( ) . await . unwrap ( ) ;
1074
1100
let mut tcp = GenTcpTransport :: < T > :: new ( GenTcpConfig :: new ( ) . port_reuse ( true ) ) ;
1075
1101
tcp. listen_on ( ListenerId :: new ( 1 ) , addr) . unwrap ( ) ;
1076
- match poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx ) ) . await {
1102
+ match tcp. select_next_some ( ) . await {
1077
1103
TransportEvent :: NewAddress { .. } => {
1078
1104
// Obtain a future socket through dialing
1079
1105
let mut socket = tcp. dial ( dest_addr) . unwrap ( ) . await . unwrap ( ) ;
@@ -1122,16 +1148,22 @@ mod tests {
1122
1148
fn port_reuse_listening ( ) {
1123
1149
env_logger:: try_init ( ) . ok ( ) ;
1124
1150
1125
- async fn listen_twice < T : Provider > ( addr : Multiaddr ) {
1151
+ async fn listen_twice < T > ( addr : Multiaddr )
1152
+ where
1153
+ T : Provider + Sized + Send + Sync + Unpin + ' static ,
1154
+ T :: Listener : Sync ,
1155
+ T :: IfWatcher : Sync ,
1156
+ T :: Stream : Sync ,
1157
+ {
1126
1158
let mut tcp = GenTcpTransport :: < T > :: new ( GenTcpConfig :: new ( ) . port_reuse ( true ) ) ;
1127
1159
tcp. listen_on ( ListenerId :: new ( 1 ) , addr) . unwrap ( ) ;
1128
- match poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx ) ) . await {
1160
+ match tcp. select_next_some ( ) . await {
1129
1161
TransportEvent :: NewAddress {
1130
1162
listen_addr : addr1, ..
1131
1163
} => {
1132
1164
// Listen on the same address a second time.
1133
1165
tcp. listen_on ( ListenerId :: new ( 1 ) , addr1. clone ( ) ) . unwrap ( ) ;
1134
- match poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx ) ) . await {
1166
+ match tcp. select_next_some ( ) . await {
1135
1167
TransportEvent :: NewAddress {
1136
1168
listen_addr : addr2, ..
1137
1169
} => {
@@ -1170,13 +1202,14 @@ mod tests {
1170
1202
fn listen_port_0 ( ) {
1171
1203
env_logger:: try_init ( ) . ok ( ) ;
1172
1204
1173
- async fn listen < T : Provider > ( addr : Multiaddr ) -> Multiaddr {
1205
+ async fn listen < T > ( addr : Multiaddr ) -> Multiaddr
1206
+ where
1207
+ T : Provider ,
1208
+ T :: IfWatcher : Sync
1209
+ {
1174
1210
let mut tcp = GenTcpTransport :: < T > :: new ( GenTcpConfig :: new ( ) ) ;
1175
1211
tcp. listen_on ( ListenerId :: new ( 1 ) , addr) . unwrap ( ) ;
1176
- poll_fn ( |cx| Pin :: new ( & mut tcp) . poll ( cx) )
1177
- . await
1178
- . into_new_address ( )
1179
- . expect ( "listen address" )
1212
+ tcp. select_next_some ( ) . await . into_new_address ( ) . expect ( "listen address" )
1180
1213
}
1181
1214
1182
1215
fn test ( addr : Multiaddr ) {
0 commit comments