Make PeerConnector tower::Buffer'able

This commit is contained in:
Henry de Valence 2019-10-15 16:46:12 -07:00
parent db7ac53f3b
commit ff27334e81
3 changed files with 19 additions and 6 deletions

View File

@ -68,7 +68,8 @@ where
{
type Response = PeerClient;
type Error = HandshakeError;
type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>>>>;
type Future =
Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send + 'static>>;
fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
Poll::Ready(Ok(()))

View File

@ -80,8 +80,11 @@ impl ConnectCmd {
let mut pc = PeerConnector::new(config, Network::Mainnet, node, &collector);
let tcp_stream = TcpStream::connect(self.addr).await?;
pc.ready().await?;
let mut client = pc.call((tcp_stream, self.addr)).await?;
pc.ready()
.await?;
let mut client = pc
.call((tcp_stream, self.addr))
.await?;
client.ready().await?;

View File

@ -71,18 +71,27 @@ impl ListenCmd {
);
use tokio::net::{TcpListener, TcpStream};
use tokio::prelude::*;
let config = app_config().network.clone();
let collector = TimestampCollector::new();
let mut pc = PeerConnector::new(config, Network::Mainnet, node, &collector);
let mut pc = Buffer::new(
PeerConnector::new(config, Network::Mainnet, node, &collector),
1,
);
let mut listener = TcpListener::bind(self.addr).await?;
loop {
let (tcp_stream, addr) = listener.accept().await?;
pc.ready().await?;
let mut client = pc.call((tcp_stream, addr)).await?;
pc.ready()
.await
.map_err(failure::Error::from_boxed_compat)?;
let mut client = pc
.call((tcp_stream, addr))
.await
.map_err(failure::Error::from_boxed_compat)?;
let addrs = match client.call(Request::GetPeers).await? {
Response::Peers(addrs) => addrs,