mirror of
https://gitlab.com/hyask/swaysome.git
synced 2025-12-10 07:44:43 +01:00
First
This commit is contained in:
commit
7ef8a7ccc1
4 changed files with 100 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/target
|
||||||
14
Cargo.lock
generated
Normal file
14
Cargo.lock
generated
Normal file
|
|
@ -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",
|
||||||
|
]
|
||||||
10
Cargo.toml
Normal file
10
Cargo.toml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
[package]
|
||||||
|
name = "swaysome"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Skia <skia@hya.sk>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
byteorder = "1"
|
||||||
75
src/main.rs
Normal file
75
src/main.rs
Normal file
|
|
@ -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::<u8>() + 2 * mem::size_of::<u32>()] = *b"i3-ipc00000000";
|
||||||
|
|
||||||
|
msg[6..].as_mut()
|
||||||
|
.write_u32::<LittleEndian>(payload_length)
|
||||||
|
.expect("Unable to write");
|
||||||
|
|
||||||
|
msg[10..].as_mut()
|
||||||
|
.write_u32::<LittleEndian>(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<String> = 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);
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue