#![allow(clippy::disallowed_names)]
#![allow(clippy::let_underscore_future)]
use fred::prelude::*;
use futures::StreamExt;
use tokio_stream::wrappers::BroadcastStream;
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = Builder::default_centralized().build()?;
let _reconnect_task = client.on_reconnect(|server| async move {
println!("Reconnected to {}", server);
Ok(())
});
let _error_task = client.on_error(|error| async move {
println!("Connection error: {:?}", error);
Ok(())
});
let mut reconnect_rx = client.reconnect_rx();
let _reconnect_task_2 = tokio::spawn(async move {
while let Ok(server) = reconnect_rx.recv().await {
println!("Reconnected to {}", server);
}
});
let mut error_rx = client.error_rx();
let _error_task_2 = tokio::spawn(async move {
while let Ok(error) = error_rx.recv().await {
println!("Connection error: {:?}", error);
}
});
client.init().await?;
client.quit().await?;
Ok(())
}
#[allow(dead_code)]
async fn setup_pool() -> Result<(), Error> {
let pool = Builder::default_centralized().build_pool(5)?;
let error_rxs: Vec<_> = pool
.clients()
.iter()
.map(|client| BroadcastStream::new(client.error_rx()))
.collect();
let reconnect_rxs: Vec<_> = pool
.clients()
.iter()
.map(|client| BroadcastStream::new(client.reconnect_rx()))
.collect();
let mut error_rx = futures::stream::select_all(error_rxs);
let mut reconnect_rx = futures::stream::select_all(reconnect_rxs);
let _all_events_task = tokio::spawn(async move {
loop {
tokio::select! {
Some(Ok(error)) = error_rx.next() => {
println!("Error: {:?}", error);
}
Some(Ok(server)) = reconnect_rx.next() => {
println!("Reconnected to {}", server);
}
}
}
});
pool.init().await?;
pool.quit().await?;
Ok(())
}