//! Handling of all client2server message stanzas use quick_xml::events::Event; use lavina_core::prelude::*; use lavina_core::room::RoomId; use proto_xmpp::bind::{Jid, Server}; use proto_xmpp::client::{Message, MessageType}; use proto_xmpp::xml::{Ignore, ToXml}; use crate::XmppConnection; impl<'a> XmppConnection<'a> { pub async fn handle_message(&mut self, output: &mut Vec>, m: Message) -> Result<()> { if let Some(Jid { name: Some(name), server, resource: _, }) = m.to { if server.0.as_ref() == "rooms.localhost" && m.r#type == MessageType::Groupchat { self.user_handle.send_message(RoomId::from(name.0.clone())?, m.body.clone().into()).await?; Message::<()> { to: Some(Jid { name: Some(self.user.xmpp_name.clone()), server: Server("localhost".into()), resource: Some(self.user.xmpp_resource.clone()), }), from: Some(Jid { name: Some(name), server: Server("rooms.localhost".into()), resource: Some(self.user.xmpp_muc_name.clone()), }), id: m.id, r#type: MessageType::Groupchat, lang: None, subject: None, body: m.body.clone(), custom: vec![], } .serialize(output); Ok(()) } else { todo!() } } else { todo!() } } }