Tidy up multiplexer api
This commit is contained in:
parent
d4acffaeca
commit
dfe8693fbf
11 changed files with 52 additions and 50 deletions
|
|
@ -16,11 +16,11 @@ fn main() {
|
||||||
bearer.set_nodelay(true).unwrap();
|
bearer.set_nodelay(true).unwrap();
|
||||||
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0, 3]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0, 3]).unwrap();
|
||||||
|
|
||||||
let (rx, tx) = muxer.use_channel(0);
|
let hs_channel = muxer.use_channel(0);
|
||||||
let versions = VersionTable::v4_and_above(MAINNET_MAGIC);
|
let versions = VersionTable::v4_and_above(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), rx, &tx).unwrap();
|
let last = run_agent(Client::initial(versions), hs_channel).unwrap();
|
||||||
println!("{:?}", last);
|
println!("{:?}", last);
|
||||||
|
|
||||||
let range = (
|
let range = (
|
||||||
|
|
@ -36,8 +36,8 @@ fn main() {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
let (bf_rx, bf_tx) = muxer.use_channel(3);
|
let bf_channel = muxer.use_channel(3);
|
||||||
let bf = BlockFetchClient::initial(range);
|
let bf = BlockFetchClient::initial(range);
|
||||||
let bf_last = run_agent(bf, bf_rx, &bf_tx);
|
let bf_last = run_agent(bf, bf_channel);
|
||||||
println!("{:?}", bf_last);
|
println!("{:?}", bf_last);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ fn main() {
|
||||||
// path for your environment
|
// path for your environment
|
||||||
let bearer = UnixStream::connect("/tmp/node.socket").unwrap();
|
let bearer = UnixStream::connect("/tmp/node.socket").unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0, 4, 5]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0, 4, 5]).unwrap();
|
||||||
|
|
||||||
let (rx, tx) = muxer.use_channel(0);
|
let hs_channel = muxer.use_channel(0);
|
||||||
let versions = VersionTable::v1_and_above(MAINNET_MAGIC);
|
let versions = VersionTable::v1_and_above(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), rx, &tx).unwrap();
|
let last = run_agent(Client::initial(versions), hs_channel).unwrap();
|
||||||
println!("last hanshake state: {:?}", last);
|
println!("last hanshake state: {:?}", last);
|
||||||
|
|
||||||
// some random known-point in the chain to use as starting point for the sync
|
// some random known-point in the chain to use as starting point for the sync
|
||||||
|
|
@ -25,8 +25,8 @@ fn main() {
|
||||||
hex::decode("15b9eeee849dd6386d3770b0745e0450190f7560e5159b1b3ab13b14b2684a45").unwrap(),
|
hex::decode("15b9eeee849dd6386d3770b0745e0450190f7560e5159b1b3ab13b14b2684a45").unwrap(),
|
||||||
)];
|
)];
|
||||||
|
|
||||||
let (cs_rx, cs_tx) = muxer.use_channel(5);
|
let cs_channel = muxer.use_channel(5);
|
||||||
let cs = ClientConsumer::initial(known_points, NoopStorage { });
|
let cs = ClientConsumer::initial(known_points, NoopStorage { });
|
||||||
let cs = run_agent(cs, cs_rx, &cs_tx).unwrap();
|
let cs = run_agent(cs, cs_channel).unwrap();
|
||||||
println!("{:?}", cs);
|
println!("{:?}", cs);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,14 @@ fn main() {
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
|
|
||||||
let bearer = TcpStream::connect("relays-new.cardano-mainnet.iohk.io:3001").unwrap();
|
let bearer = TcpStream::connect("relays-new.cardano-mainnet.iohk.io:3001").unwrap();
|
||||||
|
|
||||||
bearer.set_nodelay(true).unwrap();
|
bearer.set_nodelay(true).unwrap();
|
||||||
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0, 2]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0, 2]).unwrap();
|
||||||
let (rx, tx) = muxer.use_channel(0);
|
let hs_channel = muxer.use_channel(0);
|
||||||
|
|
||||||
let versions = VersionTable::v4_and_above(MAINNET_MAGIC);
|
let versions = VersionTable::v4_and_above(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), rx, &tx).unwrap();
|
let last = run_agent(Client::initial(versions), hs_channel).unwrap();
|
||||||
println!("{:?}", last);
|
println!("{:?}", last);
|
||||||
|
|
||||||
let known_points = vec![Point(
|
let known_points = vec![Point(
|
||||||
|
|
@ -27,10 +26,10 @@ fn main() {
|
||||||
hex::decode("15b9eeee849dd6386d3770b0745e0450190f7560e5159b1b3ab13b14b2684a45").unwrap(),
|
hex::decode("15b9eeee849dd6386d3770b0745e0450190f7560e5159b1b3ab13b14b2684a45").unwrap(),
|
||||||
)];
|
)];
|
||||||
|
|
||||||
let (cs_rx, cs_tx) = muxer.use_channel(2);
|
let cs_channel = muxer.use_channel(2);
|
||||||
|
|
||||||
let cs = ClientConsumer::initial(known_points, NoopStorage {});
|
let cs = ClientConsumer::initial(known_points, NoopStorage {});
|
||||||
let cs = run_agent(cs, cs_rx, &cs_tx).unwrap();
|
let cs = run_agent(cs, cs_channel).unwrap();
|
||||||
|
|
||||||
println!("{:?}", cs);
|
println!("{:?}", cs);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@ fn main() {
|
||||||
bearer.set_nodelay(true).unwrap();
|
bearer.set_nodelay(true).unwrap();
|
||||||
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0]).unwrap();
|
||||||
|
|
||||||
let (rx, tx) = muxer.use_channel(0);
|
let hs_channel = muxer.use_channel(0);
|
||||||
let versions = VersionTable::v1_and_above(MAINNET_MAGIC);
|
let versions = VersionTable::v1_and_above(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), rx, &tx).unwrap();
|
let last = run_agent(Client::initial(versions), hs_channel).unwrap();
|
||||||
|
|
||||||
println!("{:?}", last);
|
println!("{:?}", last);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,11 @@ fn main() {
|
||||||
bearer.set_nodelay(true).unwrap();
|
bearer.set_nodelay(true).unwrap();
|
||||||
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0]).unwrap();
|
||||||
let (rx, tx) = muxer.use_channel(0);
|
let channel = muxer.use_channel(0);
|
||||||
|
|
||||||
let versions = VersionTable::v4_and_above(MAINNET_MAGIC);
|
let versions = VersionTable::v4_and_above(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), rx, &tx).unwrap();
|
let last = run_agent(Client::initial(versions), channel).unwrap();
|
||||||
|
|
||||||
println!("{:?}", last);
|
println!("{:?}", last);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -85,15 +85,15 @@ fn main() {
|
||||||
// path for your environment
|
// path for your environment
|
||||||
let bearer = UnixStream::connect("/tmp/node.socket").unwrap();
|
let bearer = UnixStream::connect("/tmp/node.socket").unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0, 7]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0, 7]).unwrap();
|
||||||
|
|
||||||
let (rx, tx) = muxer.use_channel(0);
|
let hs_channel = muxer.use_channel(0);
|
||||||
let versions = VersionTable::only_v10(MAINNET_MAGIC);
|
let versions = VersionTable::only_v10(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), rx, &tx).unwrap();
|
let last = run_agent(Client::initial(versions), hs_channel).unwrap();
|
||||||
println!("last hanshake state: {:?}", last);
|
println!("last hanshake state: {:?}", last);
|
||||||
|
|
||||||
let (cs_rx, cs_tx) = muxer.use_channel(7);
|
let ls_channel = muxer.use_channel(7);
|
||||||
let cs = OneShotClient::<ShelleyQuery>::initial(None, Request::GetChainPoint);
|
let cs = OneShotClient::<ShelleyQuery>::initial(None, Request::GetChainPoint);
|
||||||
let cs = run_agent(cs, cs_rx, &cs_tx).unwrap();
|
let cs = run_agent(cs, ls_channel).unwrap();
|
||||||
println!("{:?}", cs);
|
println!("{:?}", cs);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
mod payload;
|
mod payload;
|
||||||
|
|
||||||
use log::{debug, trace, warn};
|
use log::{debug, trace, warn};
|
||||||
use pallas_multiplexer::Payload;
|
use pallas_multiplexer::{Channel, Payload};
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::fmt::{Debug, Display};
|
use std::fmt::{Debug, Display};
|
||||||
use std::sync::mpsc::{Receiver, Sender};
|
use std::sync::mpsc::{Receiver, Sender};
|
||||||
|
|
@ -89,9 +89,10 @@ pub trait Agent: Sized {
|
||||||
|
|
||||||
pub fn run_agent<T: Agent + Debug>(
|
pub fn run_agent<T: Agent + Debug>(
|
||||||
agent: T,
|
agent: T,
|
||||||
rx: Receiver<Payload>,
|
channel: Channel,
|
||||||
output: &impl MachineOutput,
|
|
||||||
) -> Result<T, Box<dyn std::error::Error>> {
|
) -> Result<T, Box<dyn std::error::Error>> {
|
||||||
|
let Channel(tx, rx) = channel;
|
||||||
|
|
||||||
let mut input = PayloadDeconstructor {
|
let mut input = PayloadDeconstructor {
|
||||||
rx,
|
rx,
|
||||||
remaining: Vec::new(),
|
remaining: Vec::new(),
|
||||||
|
|
@ -104,7 +105,7 @@ pub fn run_agent<T: Agent + Debug>(
|
||||||
|
|
||||||
match agent.has_agency() {
|
match agent.has_agency() {
|
||||||
true => {
|
true => {
|
||||||
agent = agent.send_next(output)?;
|
agent = agent.send_next(&tx)?;
|
||||||
}
|
}
|
||||||
false => {
|
false => {
|
||||||
let msg = input.consume_next_message::<T::Message>()?;
|
let msg = input.consume_next_message::<T::Message>()?;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use std::{net::TcpListener, os::unix::net::UnixListener, thread, time::Duration};
|
use std::{net::TcpListener, os::unix::net::UnixListener, thread, time::Duration};
|
||||||
|
|
||||||
use pallas_multiplexer::Multiplexer;
|
use pallas_multiplexer::{Channel, Multiplexer};
|
||||||
|
|
||||||
const PROTOCOLS: [u16; 2] = [0x8002u16, 0x8003u16];
|
const PROTOCOLS: [u16; 2] = [0x8002u16, 0x8003u16];
|
||||||
|
|
||||||
|
|
@ -11,13 +11,13 @@ fn main() {
|
||||||
let server = UnixListener::bind("/tmp/pallas").unwrap();
|
let server = UnixListener::bind("/tmp/pallas").unwrap();
|
||||||
let (bearer, _) = server.accept().unwrap();
|
let (bearer, _) = server.accept().unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &PROTOCOLS).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &PROTOCOLS).unwrap();
|
||||||
|
|
||||||
for protocol in PROTOCOLS {
|
for protocol in PROTOCOLS {
|
||||||
let handle = muxer.use_channel(protocol);
|
let handle = muxer.use_channel(protocol);
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let (rx, _tx) = handle;
|
let Channel(_, rx) = handle;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let payload = rx.recv().unwrap();
|
let payload = rx.recv().unwrap();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use std::{net::TcpStream, os::unix::net::UnixStream, thread, time::Duration};
|
use std::{net::TcpStream, os::unix::net::UnixStream, thread, time::Duration};
|
||||||
|
|
||||||
use pallas_multiplexer::Multiplexer;
|
use pallas_multiplexer::{Channel, Multiplexer};
|
||||||
|
|
||||||
const PROTOCOLS: [u16; 2] = [0x0002u16, 0x0003u16];
|
const PROTOCOLS: [u16; 2] = [0x0002u16, 0x0003u16];
|
||||||
|
|
||||||
|
|
@ -9,13 +9,13 @@ fn main() {
|
||||||
|
|
||||||
//let bearer = TcpStream::connect("127.0.0.1:3001").unwrap();
|
//let bearer = TcpStream::connect("127.0.0.1:3001").unwrap();
|
||||||
let bearer = UnixStream::connect("/tmp/pallas").unwrap();
|
let bearer = UnixStream::connect("/tmp/pallas").unwrap();
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &PROTOCOLS).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &PROTOCOLS).unwrap();
|
||||||
|
|
||||||
for protocol in PROTOCOLS {
|
for protocol in PROTOCOLS {
|
||||||
let handle = muxer.use_channel(protocol);
|
let handle = muxer.use_channel(protocol);
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let (_rx, tx) = handle;
|
let Channel(tx, _) = handle;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let payload = vec![1; 65545];
|
let payload = vec![1; 65545];
|
||||||
|
|
|
||||||
|
|
@ -109,8 +109,9 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ChannelProtocolIO = (Receiver<Payload>, Sender<Payload>);
|
pub struct Channel(pub Sender<Payload>, pub Receiver<Payload>);
|
||||||
type ChannelProtocolHandle = (u16, ChannelProtocolIO);
|
|
||||||
|
type ChannelProtocolHandle = (u16, Channel);
|
||||||
type ChannelIngressHandle = (u16, Receiver<Payload>);
|
type ChannelIngressHandle = (u16, Receiver<Payload>);
|
||||||
type ChannelEgressHandle = (u16, Sender<Payload>);
|
type ChannelEgressHandle = (u16, Sender<Payload>);
|
||||||
type MuxIngress = Vec<ChannelIngressHandle>;
|
type MuxIngress = Vec<ChannelIngressHandle>;
|
||||||
|
|
@ -119,11 +120,11 @@ type DemuxerEgress = Vec<ChannelEgressHandle>;
|
||||||
pub struct Multiplexer {
|
pub struct Multiplexer {
|
||||||
tx_thread: JoinHandle<()>,
|
tx_thread: JoinHandle<()>,
|
||||||
rx_thread: JoinHandle<()>,
|
rx_thread: JoinHandle<()>,
|
||||||
io_handles: HashMap<u16, ChannelProtocolIO>,
|
io_handles: HashMap<u16, Channel>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Multiplexer {
|
impl Multiplexer {
|
||||||
pub fn try_setup<TBearer>(bearer: TBearer, protocols: &[u16]) -> Result<Multiplexer, Error>
|
pub fn setup<TBearer>(bearer: TBearer, protocols: &[u16]) -> Result<Multiplexer, Error>
|
||||||
where
|
where
|
||||||
TBearer: Bearer + 'static,
|
TBearer: Bearer + 'static,
|
||||||
{
|
{
|
||||||
|
|
@ -133,8 +134,9 @@ impl Multiplexer {
|
||||||
let (demux_tx, demux_rx) = mpsc::channel::<Payload>();
|
let (demux_tx, demux_rx) = mpsc::channel::<Payload>();
|
||||||
let (mux_tx, mux_rx) = mpsc::channel::<Payload>();
|
let (mux_tx, mux_rx) = mpsc::channel::<Payload>();
|
||||||
|
|
||||||
let protocol_io = (demux_rx, mux_tx);
|
let channel = Channel(mux_tx, demux_rx);
|
||||||
let protocol_handle: ChannelProtocolHandle = (*id, protocol_io);
|
|
||||||
|
let protocol_handle: ChannelProtocolHandle = (*id, channel);
|
||||||
let ingress_handle: ChannelIngressHandle = (*id, mux_rx);
|
let ingress_handle: ChannelIngressHandle = (*id, mux_rx);
|
||||||
let egress_handle: ChannelEgressHandle = (*id, demux_tx);
|
let egress_handle: ChannelEgressHandle = (*id, demux_tx);
|
||||||
|
|
||||||
|
|
@ -152,7 +154,7 @@ impl Multiplexer {
|
||||||
let mut rx_bearer = bearer.clone();
|
let mut rx_bearer = bearer.clone();
|
||||||
let rx_thread = thread::spawn(move || rx_loop(&mut rx_bearer, egress));
|
let rx_thread = thread::spawn(move || rx_loop(&mut rx_bearer, egress));
|
||||||
|
|
||||||
let io_handles: HashMap<u16, ChannelProtocolIO> = protocol_handles.into_iter().collect();
|
let io_handles: HashMap<u16, Channel> = protocol_handles.into_iter().collect();
|
||||||
|
|
||||||
Ok(Multiplexer {
|
Ok(Multiplexer {
|
||||||
io_handles,
|
io_handles,
|
||||||
|
|
@ -161,7 +163,7 @@ impl Multiplexer {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn use_channel(&mut self, protocol_id: u16) -> ChannelProtocolIO {
|
pub fn use_channel(&mut self, protocol_id: u16) -> Channel {
|
||||||
self.io_handles.remove(&protocol_id).unwrap()
|
self.io_handles.remove(&protocol_id).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,17 +16,17 @@ fn main() {
|
||||||
bearer.set_nodelay(true).unwrap();
|
bearer.set_nodelay(true).unwrap();
|
||||||
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
bearer.set_keepalive_ms(Some(30_000u32)).unwrap();
|
||||||
|
|
||||||
let mut muxer = Multiplexer::try_setup(bearer, &vec![0, 4]).unwrap();
|
let mut muxer = Multiplexer::setup(bearer, &vec![0, 4]).unwrap();
|
||||||
|
|
||||||
let (hs_rx, hs_tx) = muxer.use_channel(0);
|
let hs_channel = muxer.use_channel(0);
|
||||||
let versions = VersionTable::v1_and_above(MAINNET_MAGIC);
|
let versions = VersionTable::v1_and_above(MAINNET_MAGIC);
|
||||||
let last = run_agent(Client::initial(versions), hs_rx, &hs_tx).unwrap();
|
let last = run_agent(Client::initial(versions), hs_channel).unwrap();
|
||||||
println!("{:?}", last);
|
println!("{:?}", last);
|
||||||
|
|
||||||
|
|
||||||
let (ts_rx, ts_tx) = muxer.use_channel(4);
|
let ts_channel = muxer.use_channel(4);
|
||||||
let ts = NaiveProvider::initial(vec![]);
|
let ts = NaiveProvider::initial(vec![]);
|
||||||
let ts = run_agent(ts, ts_rx, &ts_tx).unwrap();
|
let ts = run_agent(ts, ts_channel).unwrap();
|
||||||
|
|
||||||
println!("{:?}", ts);
|
println!("{:?}", ts);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue