mq linus
This commit is contained in:
parent
83581c13e1
commit
e1d6fe55a6
2 changed files with 10 additions and 19 deletions
|
|
@ -17,6 +17,7 @@ byteorder = "1.5.0"
|
||||||
serde_json = "1.0.108"
|
serde_json = "1.0.108"
|
||||||
serde = { version = "1.0.193", features = ["derive"] }
|
serde = { version = "1.0.193", features = ["derive"] }
|
||||||
log = "0.4.20"
|
log = "0.4.20"
|
||||||
|
named_pipe = "0.4.1"
|
||||||
|
|
||||||
[dependencies.uuid]
|
[dependencies.uuid]
|
||||||
version = "1.6.1"
|
version = "1.6.1"
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use serde_json::{json, Value};
|
use serde_json::{json, Value};
|
||||||
use std::env::var;
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::os::unix::net::UnixStream;
|
use named_pipe::PipeClient;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use crate::models::client::{commands::Commands, payload::OpCode, payload::Payload};
|
use crate::models::client::{commands::Commands, payload::OpCode, payload::Payload};
|
||||||
|
|
@ -20,7 +19,7 @@ pub struct DiscordClient {
|
||||||
pub is_connected: bool,
|
pub is_connected: bool,
|
||||||
|
|
||||||
/// Unix Stream socket of Client Connection.
|
/// Unix Stream socket of Client Connection.
|
||||||
socket: Option<UnixStream>,
|
socket: Option<PipeClient>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DiscordClient {
|
impl DiscordClient {
|
||||||
|
|
@ -37,7 +36,7 @@ impl DiscordClient {
|
||||||
pub fn connect(&mut self) -> Result<(), ErrorMsg> {
|
pub fn connect(&mut self) -> Result<(), ErrorMsg> {
|
||||||
let path = self.fetch_process_pathbuf().join("discord-ipc-0");
|
let path = self.fetch_process_pathbuf().join("discord-ipc-0");
|
||||||
|
|
||||||
match UnixStream::connect(&path) {
|
match PipeClient::connect(&path) {
|
||||||
Ok(socket) => {
|
Ok(socket) => {
|
||||||
self.socket = Some(socket);
|
self.socket = Some(socket);
|
||||||
self.handshake().expect("Could not handshake.");
|
self.handshake().expect("Could not handshake.");
|
||||||
|
|
@ -64,24 +63,15 @@ impl DiscordClient {
|
||||||
Ok(self.send(payload, OpCode::MESSAGE as u8)?)
|
Ok(self.send(payload, OpCode::MESSAGE as u8)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn socket(&mut self) -> &mut UnixStream {
|
fn socket(&mut self) -> &mut PipeClient {
|
||||||
self.socket.as_mut().unwrap()
|
match &mut self.socket {
|
||||||
|
Some(socket) => socket,
|
||||||
|
None => panic!("Socket is not initialized"),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fetch_process_pathbuf(&mut self) -> PathBuf {
|
fn fetch_process_pathbuf(&mut self) -> PathBuf {
|
||||||
let mut path = String::new();
|
PathBuf::from(r"\\.\pipe\")
|
||||||
|
|
||||||
for key in ["XDG_RUNTIME_DIR", "TMPDIR", "TMP"] {
|
|
||||||
match var(key) {
|
|
||||||
Ok(val) => {
|
|
||||||
path = val;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_ => continue,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PathBuf::from(path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handshake(&mut self) -> Result<(u32, Value), Box<dyn Error>> {
|
fn handshake(&mut self) -> Result<(u32, Value), Box<dyn Error>> {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue