42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
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<UnixStream>,
|
|
}
|
|
|
|
impl MagpieClient {
|
|
pub fn new() -> std::io::Result<Self> {
|
|
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<T: Serialize>(&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));
|
|
}
|
|
}
|