From db9505548bb6a2b3d94085243fde4721da1fd81e Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Fri, 21 Mar 2025 17:53:21 +0000 Subject: [PATCH] feat: left and right mouse clicks --- src/computer.rs | 46 +++++++++++++++++++++++++++++++++++++++------- src/websocket.rs | 13 ++++++++++--- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/computer.rs b/src/computer.rs index 38a7994..9324beb 100644 --- a/src/computer.rs +++ b/src/computer.rs @@ -5,7 +5,7 @@ use std::{ time::Duration, }; -use inputbot::KeybdKey; +use inputbot::{KeybdKey, MouseButton}; use sysinfo::System; use tungstenite::{stream::MaybeTlsStream, WebSocket}; @@ -14,15 +14,32 @@ use crate::websocket; pub fn start_sending(socket: &mut WebSocket>) { let mut sys = System::new(); - // Key counter let key_counter = Arc::new(Mutex::new(0_u16)); + let left_click_counter = Arc::new(Mutex::new(0_u16)); + let right_click_counter = Arc::new(Mutex::new(0_u16)); + let key_counter_clone = Arc::clone(&key_counter); + let left_click_counter_clone = Arc::clone(&left_click_counter); + let right_click_counter_clone = Arc::clone(&right_click_counter); + thread::spawn(move || { KeybdKey::bind_all(move |_| { let mut count = key_counter_clone.lock().unwrap(); *count += 1; }); + MouseButton::bind_all(move |event| match event { + MouseButton::LeftButton => { + let mut count = left_click_counter_clone.lock().unwrap(); + *count += 1; + } + MouseButton::RightButton => { + let mut count = right_click_counter_clone.lock().unwrap(); + *count += 1; + } + _ => {} + }); + inputbot::handle_input_events(); }); @@ -36,13 +53,28 @@ pub fn start_sending(socket: &mut WebSocket>) { let used_memory = sys.used_memory(); let memory_usage = ((used_memory as f64) / (total_memory as f64) * 100.0).floor() as u8; - let mut guard = key_counter.lock().unwrap(); - let key_presses = *guard; + let mut key_guard = key_counter.lock().unwrap(); + let key_presses = *key_guard; - websocket::send(socket, cpu_usage, memory_usage, key_presses); + let mut left_guard = left_click_counter.lock().unwrap(); + let left_clicks = *left_guard; - // Reset key press counter after sending - *guard = 0; + let mut right_guard = right_click_counter.lock().unwrap(); + let right_clicks = *right_guard; + + websocket::send( + socket, + cpu_usage, + memory_usage, + key_presses, + left_clicks, + right_clicks, + ); + + // Reset counters after sending + *key_guard = 0; + *left_guard = 0; + *right_guard = 0; thread::sleep(Duration::from_secs(60)); } diff --git a/src/websocket.rs b/src/websocket.rs index 284531d..f636065 100644 --- a/src/websocket.rs +++ b/src/websocket.rs @@ -43,10 +43,17 @@ pub fn connect() -> Result>, tungstenite::Er Ok(socket) } -pub fn send(socket: &mut WebSocket>, cpu: u8, ram: u8, key_presses: u16) { +pub fn send( + socket: &mut WebSocket>, + cpu: u8, + ram: u8, + key_presses: u16, + left_clicks: u16, + right_clicks: u16, +) { let message = format!( - "{{ \"cpu\": {}, \"ram\": {}, \"key_presses\": {} }}", - cpu, ram, key_presses + "{{ \"cpu\": {}, \"ram\": {}, \"key_presses\": {}, \"left_clicks\": {}, \"right_clicks\": {} }}", + cpu, ram, key_presses, left_clicks, right_clicks ); println!("Sending to WebSocket: {}", message);