feat: key press counter

This commit is contained in:
trafficlunar 2025-03-21 17:43:10 +00:00
parent 8d84c99979
commit d06617e367
5 changed files with 287 additions and 31 deletions

View file

@ -1,5 +1,11 @@
use std::{net::TcpStream, thread, time::Duration};
use std::{
net::TcpStream,
sync::{Arc, Mutex},
thread,
time::Duration,
};
use inputbot::KeybdKey;
use sysinfo::System;
use tungstenite::{stream::MaybeTlsStream, WebSocket};
@ -8,6 +14,18 @@ use crate::websocket;
pub fn start_sending(socket: &mut WebSocket<MaybeTlsStream<TcpStream>>) {
let mut sys = System::new();
// Key counter
let key_counter = Arc::new(Mutex::new(0_u16));
let key_counter_clone = Arc::clone(&key_counter);
thread::spawn(move || {
KeybdKey::bind_all(move |_| {
let mut count = key_counter_clone.lock().unwrap();
*count += 1;
});
inputbot::handle_input_events();
});
loop {
sys.refresh_cpu_usage();
sys.refresh_memory();
@ -16,10 +34,16 @@ pub fn start_sending(socket: &mut WebSocket<MaybeTlsStream<TcpStream>>) {
let total_memory = sys.total_memory();
let used_memory = sys.used_memory();
let memory_usage = ((used_memory as f64) / (total_memory as f64) * 100.0).floor() as u8;
websocket::send(socket, cpu_usage, memory_usage);
let mut guard = key_counter.lock().unwrap();
let key_presses = *guard;
websocket::send(socket, cpu_usage, memory_usage, key_presses);
// Reset key press counter after sending
*guard = 0;
thread::sleep(Duration::from_secs(60));
}
}
}

View file

@ -1,17 +1,20 @@
use std::{env, net::TcpStream};
use tungstenite::{handshake::client::generate_key, http::Request, stream::MaybeTlsStream, Message, WebSocket};
use tungstenite::{
handshake::client::generate_key, http::Request, stream::MaybeTlsStream, Message, WebSocket,
};
use url::Url;
use crate::notifications;
pub fn connect() -> Result<WebSocket<MaybeTlsStream<TcpStream>>, tungstenite::Error> {
let websocket_url = Url::parse(&env::var("WEBSOCKET_URL").unwrap()).expect("Invalid WebSocket URL");
let websocket_url =
Url::parse(&env::var("WEBSOCKET_URL").unwrap()).expect("Invalid WebSocket URL");
let host = websocket_url.host_str().expect("Host not found in URL");
let host_header = match websocket_url.port() {
Some(port) => format!("{}:{}", host, port),
None => host.to_string()
None => host.to_string(),
};
let request = Request::builder()
@ -40,12 +43,13 @@ pub fn connect() -> Result<WebSocket<MaybeTlsStream<TcpStream>>, tungstenite::Er
Ok(socket)
}
pub fn send(socket: &mut WebSocket<MaybeTlsStream<TcpStream>>, cpu: u8, ram: u8) {
let message = format!("{{ \"cpu\": {}, \"ram\": {} }}", cpu, ram);
pub fn send(socket: &mut WebSocket<MaybeTlsStream<TcpStream>>, cpu: u8, ram: u8, key_presses: u16) {
let message = format!(
"{{ \"cpu\": {}, \"ram\": {}, \"key_presses\": {} }}",
cpu, ram, key_presses
);
println!("Sending to WebSocket: {}", message);
socket
.send(Message::Text(message))
.unwrap();
socket.send(Message::Text(message)).unwrap();
}