use serde::Serialize; use std::os::unix::net::UnixStream; use std::path::Path; use crate::protocol::{ClientMessenger, MagpieServerMsg, PanelId, SendMessage, MAGPIE_SOCK}; /// A client to a Magpie server. pub struct MagpieClient { pub messenger: ClientMessenger, } impl MagpieClient { pub fn new() -> std::io::Result { let sock_dir = std::env::var("XDG_RUNTIME_DIR").expect("XDG_RUNTIME_DIR not set"); let sock_dir = Path::new(&sock_dir); let sock_path = sock_dir.join(MAGPIE_SOCK); let socket = UnixStream::connect(sock_path)?; Ok(Self { messenger: ClientMessenger::new(socket), }) } pub fn send(&mut self, msg: &MagpieServerMsg) { if let Err(err) = self.messenger.send(msg) { eprintln!("Message send error: {:?}", err); } } pub fn send_json_message(&mut self, id: PanelId, msg: &T) { let msg = serde_json::to_string(msg).unwrap(); eprintln!("Sending message: {}", msg); let msg = SendMessage { id, msg: msg.into_bytes(), }; self.send(&MagpieServerMsg::SendMessage(msg)); } }