use std::time::Duration;
use log::Level::Info;
use log::info;
use wingfoil::adapters::fix::{FixPollMode, FixSessionStatus, fix_accept, fix_connect};
use wingfoil::*;
fn main() {
env_logger::init();
let port = 19876;
info!("Starting FIX loopback on port {port}");
let (acc_data, acc_status) = fix_accept(port, "ACCEPTOR", "INITIATOR", FixPollMode::AlwaysSpin);
let (init_data, init_status) = fix_connect(
"127.0.0.1",
port,
"INITIATOR",
"ACCEPTOR",
FixPollMode::AlwaysSpin,
);
let acc_msg_count = acc_data
.map(|burst| burst.len())
.fold::<usize>(|acc, n| *acc += n);
let init_logged_in = init_status
.filter_value(|burst| burst.contains(&FixSessionStatus::LoggedIn))
.logged("initiator-logon", Info);
let acc_status_node = acc_status.logged("acceptor-status", Info).as_node();
let count_node = acc_msg_count.logged("acceptor-msg-count", Info).as_node();
Graph::new(
vec![
init_data.as_node(),
init_logged_in.as_node(),
acc_status_node,
count_node,
],
RunMode::RealTime,
RunFor::Duration(Duration::from_secs(5)),
)
.run()
.unwrap();
info!("Done.");
}