use std::sync::Arc;
use lazy_static::lazy_static;
use std::sync::atomic::{AtomicI32, Ordering};
lazy_static! {
static ref id_pub_channel: AtomicI32 = AtomicI32::new(0);
}
const MOD: i32 = 3571823;
pub async fn setup_publishing(topic: String, connection_network: Arc<crate::multibus::MultiBus>) {
connection_network.clone().initialize(topic.clone()).await;
}
pub async fn dispatch(src: String, topic: String, message: String, connection_network: Arc<crate::multibus::MultiBus>) {
connection_network.clone().send_data(message.clone(), topic.clone(), src.clone(), "dispatch".to_string()).await;
}
pub async fn publish(src: String, topic: String, message: String, connection_network: Arc<crate::multibus::MultiBus>) -> String {
let current_id_i32 = id_pub_channel.load(Ordering::SeqCst);
id_pub_channel.store((current_id_i32 + 1) % MOD, Ordering::SeqCst);
let current_id_str = current_id_i32.to_string();
connection_network.clone().initialize(src.clone() + "_pub" + ¤t_id_str).await;
connection_network.clone().send_data(message.clone(), topic.clone(), src.clone() + "_pub" + ¤t_id_str, "publish".to_string()).await;
while let Some(response) = connection_network.clone().request_data(src.clone() + "_pub" + ¤t_id_str).await {
connection_network.clone().remove(src.clone() + "_pub" + ¤t_id_str).await;
return response.clone().to_owned();
}
connection_network.clone().remove(src.clone() + "_pub" + ¤t_id_str).await;
"Something wrong happened while waiting for response".to_owned()
}