use futures::{StreamExt, future};
use crate::{
connection_manager::{ConnectionDirection, PeerConnectionInfo},
memsocket::MemorySocket,
multiaddr::Multiaddr,
multiplexing::Yamux,
transports::{MemoryTransport, Transport},
};
pub async fn build_connected_sockets() -> (Multiaddr, MemorySocket, MemorySocket) {
let (mut listener, addr) = MemoryTransport.listen(&"/memory/0".parse().unwrap()).await.unwrap();
let (dial_sock, listen_sock) = future::join(MemoryTransport.dial(&addr), listener.next()).await;
let (listen_sock, _) = listen_sock.unwrap().unwrap();
(addr, dial_sock.unwrap(), listen_sock)
}
pub async fn build_multiplexed_connections() -> (Multiaddr, Yamux, Yamux) {
let (addr, socket_out, socket_in) = build_connected_sockets().await;
let muxer_out =
Yamux::upgrade_connection(socket_out, ConnectionDirection::Outbound, PeerConnectionInfo::default()).unwrap();
let muxer_in =
Yamux::upgrade_connection(socket_in, ConnectionDirection::Inbound, PeerConnectionInfo::default()).unwrap();
(addr, muxer_out, muxer_in)
}