commit 7ef8a7ccc1d7bf13f225a5b8ce73cb20336b2685 Author: Skia Date: Wed Dec 23 18:29:31 2020 +0100 First diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..81cf702 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,14 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "swaysome" +version = "0.1.0" +dependencies = [ + "byteorder", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..99029a3 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "swaysome" +version = "0.1.0" +authors = ["Skia "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +byteorder = "1" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..aaca053 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,75 @@ +// client.rs +extern crate byteorder; + +use std::env; +use std::path::Path; +use std::io::{Read, Write}; +use std::process::exit; +use std::os::unix::net::UnixStream; +use std::mem; + +use byteorder::{WriteBytesExt, LittleEndian}; + + +fn get_stream() -> UnixStream { + let socket_path = match env::var("I3SOCK") { + Ok(val) => val, + Err(_e) => { + println!("couldn't find i3/sway socket"); + exit(1); + }, + }; + + let socket = Path::new(&socket_path); + + // Connect to socket + match UnixStream::connect(&socket) { + Err(_) => panic!("couldn't connect to i3/sway socket"), + Ok(stream) => stream, + } +} + + +fn send_msg(mut stream: &UnixStream, msg_type: u32, payload: &str) { + let payload_length = payload.len() as u32; + + // let magic = b"i3-ipc"; + + // let mut msg = b"i3-ipc".to_vec(); + let mut msg: [u8; 6 * mem::size_of::() + 2 * mem::size_of::()] = *b"i3-ipc00000000"; + + msg[6..].as_mut() + .write_u32::(payload_length) + .expect("Unable to write"); + + msg[10..].as_mut() + .write_u32::(msg_type) + .expect("Unable to write"); + + // let msg = format!("{}{}{}{}", magic, pl_t, pl_l, payload); + println!("msg: {:x?}", msg); + + match stream.write_all(&msg) { + Err(_) => panic!("couldn't send message"), + Ok(_) => {} + } +} + + +fn main() { + // `args` returns the arguments passed to the program + let args: Vec = env::args().map(|x| x.to_string()) + .collect(); + + let mut stream = get_stream(); + + // stream.set_nonblocking(true).expect("could not set non blocking"); + + send_msg(&stream, 1, ""); + + let mut response_header: [u8; 14] = *b".............."; + // let mut response = vec!(); + stream.read_exact(&mut response_header); + // stream.read_to_string(&mut response); + println!("answer: {:x?}", response_header); +}