diff --git a/Cargo.toml b/Cargo.toml index efc4160..c9d0143 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ byteorder = "1.5.0" serde_json = "1.0.108" serde = { version = "1.0.193", features = ["derive"] } log = "0.4.20" +named_pipe = "0.4.1" [dependencies.uuid] version = "1.6.1" diff --git a/src/client/ipc.rs b/src/client/ipc.rs index 0a63de7..936c723 100644 --- a/src/client/ipc.rs +++ b/src/client/ipc.rs @@ -1,10 +1,9 @@ use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use log::debug; use serde_json::{json, Value}; -use std::env::var; use std::error::Error; use std::io::{Read, Write}; -use std::os::unix::net::UnixStream; +use named_pipe::PipeClient; use std::path::PathBuf; use crate::models::client::{commands::Commands, payload::OpCode, payload::Payload}; @@ -20,7 +19,7 @@ pub struct DiscordClient { pub is_connected: bool, /// Unix Stream socket of Client Connection. - socket: Option, + socket: Option, } impl DiscordClient { @@ -37,7 +36,7 @@ impl DiscordClient { pub fn connect(&mut self) -> Result<(), ErrorMsg> { let path = self.fetch_process_pathbuf().join("discord-ipc-0"); - match UnixStream::connect(&path) { + match PipeClient::connect(&path) { Ok(socket) => { self.socket = Some(socket); self.handshake().expect("Could not handshake."); @@ -64,24 +63,15 @@ impl DiscordClient { Ok(self.send(payload, OpCode::MESSAGE as u8)?) } - fn socket(&mut self) -> &mut UnixStream { - self.socket.as_mut().unwrap() + fn socket(&mut self) -> &mut PipeClient { + match &mut self.socket { + Some(socket) => socket, + None => panic!("Socket is not initialized"), + } } fn fetch_process_pathbuf(&mut self) -> PathBuf { - let mut path = String::new(); - - for key in ["XDG_RUNTIME_DIR", "TMPDIR", "TMP"] { - match var(key) { - Ok(val) => { - path = val; - break; - } - _ => continue, - } - } - - PathBuf::from(path) + PathBuf::from(r"\\.\pipe\") } fn handshake(&mut self) -> Result<(u32, Value), Box> {