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