mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-03-25 22:20:53 +03:00
reduce coupling of emulation and capture backends
This commit is contained in:
@@ -5,8 +5,8 @@ use std::{collections::HashSet, net::SocketAddr};
|
||||
use tokio::{process::Command, sync::mpsc::Sender, task::JoinHandle};
|
||||
|
||||
use crate::{
|
||||
capture::{self, error::CaptureCreationError, InputCapture},
|
||||
client::{ClientEvent, ClientHandle},
|
||||
capture::{self, error::CaptureCreationError, CaptureHandle, InputCapture, Position},
|
||||
client::ClientHandle,
|
||||
config::CaptureBackend,
|
||||
event::{Event, KeyboardEvent},
|
||||
scancode,
|
||||
@@ -19,8 +19,10 @@ use super::Server;
|
||||
pub enum CaptureEvent {
|
||||
/// capture must release the mouse
|
||||
Release,
|
||||
/// capture is notified of a change in client states
|
||||
ClientEvent(ClientEvent),
|
||||
/// add a capture client
|
||||
Create(CaptureHandle, Position),
|
||||
/// destory a capture client
|
||||
Destroy(CaptureHandle),
|
||||
/// termination signal
|
||||
Terminate,
|
||||
}
|
||||
@@ -52,9 +54,9 @@ pub fn new(
|
||||
CaptureEvent::Release => {
|
||||
capture.release()?;
|
||||
server.state.replace(State::Receiving);
|
||||
|
||||
}
|
||||
CaptureEvent::ClientEvent(e) => capture.notify(e)?,
|
||||
CaptureEvent::Create(h, p) => capture.create(h, p)?,
|
||||
CaptureEvent::Destroy(h) => capture.destroy(h)?,
|
||||
CaptureEvent::Terminate => break,
|
||||
},
|
||||
None => break,
|
||||
@@ -82,7 +84,7 @@ async fn handle_capture_event(
|
||||
capture: &mut Box<dyn InputCapture>,
|
||||
sender_tx: &Sender<(Event, SocketAddr)>,
|
||||
timer_tx: &Sender<()>,
|
||||
event: (ClientHandle, Event),
|
||||
event: (CaptureHandle, Event),
|
||||
pressed_keys: &mut HashSet<scancode::Linux>,
|
||||
release_bind: &[scancode::Linux],
|
||||
) -> Result<()> {
|
||||
|
||||
@@ -7,9 +7,9 @@ use tokio::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
client::{ClientEvent, ClientHandle},
|
||||
client::ClientHandle,
|
||||
config::EmulationBackend,
|
||||
emulate::{self, error::EmulationCreationError, InputEmulation},
|
||||
emulate::{self, error::EmulationCreationError, EmulationHandle, InputEmulation},
|
||||
event::{Event, KeyboardEvent},
|
||||
scancode,
|
||||
server::State,
|
||||
@@ -19,8 +19,10 @@ use super::{CaptureEvent, Server};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum EmulationEvent {
|
||||
/// input emulation is notified of a change in client states
|
||||
ClientEvent(ClientEvent),
|
||||
/// create a new client
|
||||
Create(EmulationHandle),
|
||||
/// destroy a client
|
||||
Destroy(EmulationHandle),
|
||||
/// input emulation must release keys for client
|
||||
ReleaseKeys(ClientHandle),
|
||||
/// termination signal
|
||||
@@ -49,7 +51,8 @@ pub fn new(
|
||||
emulate_event = rx.recv() => {
|
||||
match emulate_event {
|
||||
Some(e) => match e {
|
||||
EmulationEvent::ClientEvent(e) => emulate.notify(e).await,
|
||||
EmulationEvent::Create(h) => emulate.create(h).await,
|
||||
EmulationEvent::Destroy(h) => emulate.destroy(h).await,
|
||||
EmulationEvent::ReleaseKeys(c) => release_keys(&server, &mut emulate, c).await,
|
||||
EmulationEvent::Terminate => break,
|
||||
},
|
||||
@@ -73,8 +76,6 @@ pub fn new(
|
||||
release_keys(&server, &mut emulate, client).await;
|
||||
}
|
||||
|
||||
// destroy emulator
|
||||
emulate.destroy().await;
|
||||
anyhow::Ok(())
|
||||
});
|
||||
Ok((emulate_task, tx))
|
||||
|
||||
@@ -17,7 +17,7 @@ use tokio::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
client::{ClientEvent, ClientHandle, Position},
|
||||
client::{ClientHandle, Position},
|
||||
frontend::{self, FrontendEvent, FrontendListener, FrontendRequest},
|
||||
};
|
||||
|
||||
@@ -205,9 +205,8 @@ pub async fn deactivate_client(
|
||||
None => return,
|
||||
};
|
||||
|
||||
let event = ClientEvent::Destroy(handle);
|
||||
let _ = capture.send(CaptureEvent::ClientEvent(event)).await;
|
||||
let _ = emulate.send(EmulationEvent::ClientEvent(event)).await;
|
||||
let _ = capture.send(CaptureEvent::Destroy(handle)).await;
|
||||
let _ = emulate.send(EmulationEvent::Destroy(handle)).await;
|
||||
}
|
||||
|
||||
pub async fn activate_client(
|
||||
@@ -237,9 +236,8 @@ pub async fn activate_client(
|
||||
};
|
||||
|
||||
/* notify emulation, capture and frontends */
|
||||
let event = ClientEvent::Create(handle, pos);
|
||||
let _ = capture.send(CaptureEvent::ClientEvent(event)).await;
|
||||
let _ = emulate.send(EmulationEvent::ClientEvent(event)).await;
|
||||
let _ = capture.send(CaptureEvent::Create(handle, pos.into())).await;
|
||||
let _ = emulate.send(EmulationEvent::Create(handle)).await;
|
||||
}
|
||||
|
||||
pub async fn remove_client(
|
||||
@@ -258,9 +256,8 @@ pub async fn remove_client(
|
||||
};
|
||||
|
||||
if active {
|
||||
let destroy = ClientEvent::Destroy(handle);
|
||||
let _ = capture.send(CaptureEvent::ClientEvent(destroy)).await;
|
||||
let _ = emulate.send(EmulationEvent::ClientEvent(destroy)).await;
|
||||
let _ = capture.send(CaptureEvent::Destroy(handle)).await;
|
||||
let _ = emulate.send(EmulationEvent::Destroy(handle)).await;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -335,13 +332,11 @@ async fn update_pos(
|
||||
// update state in event input emulator & input capture
|
||||
if changed {
|
||||
if active {
|
||||
let destroy = ClientEvent::Destroy(handle);
|
||||
let _ = capture.send(CaptureEvent::ClientEvent(destroy)).await;
|
||||
let _ = emulate.send(EmulationEvent::ClientEvent(destroy)).await;
|
||||
let _ = capture.send(CaptureEvent::Destroy(handle)).await;
|
||||
let _ = emulate.send(EmulationEvent::Destroy(handle)).await;
|
||||
}
|
||||
let create = ClientEvent::Create(handle, pos);
|
||||
let _ = capture.send(CaptureEvent::ClientEvent(create)).await;
|
||||
let _ = emulate.send(EmulationEvent::ClientEvent(create)).await;
|
||||
let _ = capture.send(CaptureEvent::Create(handle, pos.into())).await;
|
||||
let _ = emulate.send(EmulationEvent::Create(handle)).await;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user