use clap::Parser;
use color_eyre::Result;
use common_x::signal::shutdown_signal;
use eldegoss::{
config::Config,
protocol::Message,
session::{Session, Subscriber},
util::Args,
};
use tokio::select;
use tracing::{debug, info};
#[tokio::main(flavor = "multi_thread", worker_threads = 30)]
async fn main() -> Result<()> {
common_x::log::init_log_filter("info");
let args = Args::parse();
let config: Config = common_x::configure::file_config(&args.config)?;
info!("id: {}", config.id);
let callback = vec![Subscriber::new("topic", move |net_msg| {
debug!("net_msg: {:?}", net_msg);
})];
let session = Session::serve(config, callback).await;
let sender = session.sender();
let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(1));
let mut count = 0;
loop {
select! {
_ = interval.tick() => {
let msg = Message::put("topic", vec![count]);
sender.send_async(msg).await.ok();
count += 1;
if count == 100 {
count = 0;
}
session.membership().await.iter().for_each(|(eid, meta_data)| {
debug!("member({eid}): {meta_data:?}", );
});
}
_ = shutdown_signal() => {
info!("shutdown");
break;
}
}
}
Ok(())
}