Documentation
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::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 (tx, rv) = flume::bounded(1024 * 1024);
    let callback = vec![Subscriber::new("topic", move |net_msg| {
        info!("net_msg: {:?}", net_msg);
    })];

    tokio::spawn(Session::serve(config, rv, callback));

    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]);
                tx.send_async(msg).await.ok();
                count += 1;
                if count == 100 {
                    count = 0;
                }
            }
            _ = shutdown_signal() => {
                info!("shutdown");
                break;
            }
        }
    }
    Ok(())
}