#![allow(dead_code)] pub struct DatalessBroadcaster { msg_router: tokio::sync::mpsc::Sender, code_out: rlnl::event_code::NetworkEvent, property: literustlib::packet::Property, } impl DatalessBroadcaster { pub fn handler(init_ctx: &crate::InitConfig) -> crate::handlers::dataless::Dataless { crate::handlers::dataless::Dataless::new(Self::new(init_ctx)) } fn new(init_ctx: &crate::InitConfig) -> Self { Self { msg_router: init_ctx.matches_chann.clone(), code_out: crate::handler::i16_to_event_or_panic(CODE_OUT), property: literustlib::packet::Property::try_from(PROPERTY).expect("Invalid literustlib packet property"), } } } #[async_trait::async_trait] impl crate::handlers::dataless::DatalessEventCodeHandler for DatalessBroadcaster { const CODE: rlnl::event_code::NetworkEvent = crate::handler::i16_to_event_or_panic(CODE_IN); async fn handle(&self, _peer: &std::sync::Arc>, user: &crate::UserData, _sender: &std::sync::Arc>) { if let Some(user_info) = user.user().await { if EXCLUDE_SENDER { crate::events::log_channel_send_failure(self.msg_router.send(crate::matches::GameMessage::RebroadcastRlnl { skip_user_id: user_info.user_id(), event: self.code_out, event_in: Self::CODE, property: self.property, data: None, }).await); } else { crate::events::log_channel_send_failure(self.msg_router.send(crate::matches::GameMessage::BroadcastRlnl { user_id: user_info.user_id(), event: self.code_out, event_in: Self::CODE, property: self.property, data: None, }).await); } } else { log::error!("Failed to rebroadcast {:?}-?{:?} for user (no auth!)", Self::CODE, self.code_out); } } }