mirror of
https://github.com/rustdesk/qemu-display.git
synced 2025-07-01 23:35:36 +00:00
Rename Event to ConsoleEvent
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
f1bd2032b0
commit
35cc658983
@ -5,7 +5,7 @@ use std::{os::unix::io::AsRawFd, thread};
|
|||||||
use zbus::{dbus_proxy, export::zvariant::Fd};
|
use zbus::{dbus_proxy, export::zvariant::Fd};
|
||||||
|
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
use crate::{Event, KeyboardProxy, Listener, MouseProxy};
|
use crate::{ConsoleEvent, KeyboardProxy, ConsoleListener, MouseProxy};
|
||||||
|
|
||||||
#[dbus_proxy(default_service = "org.qemu", interface = "org.qemu.Display1.Console")]
|
#[dbus_proxy(default_service = "org.qemu", interface = "org.qemu.Display1.Console")]
|
||||||
pub trait Console {
|
pub trait Console {
|
||||||
@ -76,7 +76,7 @@ impl Console {
|
|||||||
Ok(self.proxy.height()?)
|
Ok(self.proxy.height()?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn listen(&self) -> Result<(Receiver<Event>, Sender<()>)> {
|
pub fn listen(&self) -> Result<(Receiver<ConsoleEvent>, Sender<()>)> {
|
||||||
let (p0, p1) = UnixStream::pair()?;
|
let (p0, p1) = UnixStream::pair()?;
|
||||||
let (tx, rx) = mpsc::channel();
|
let (tx, rx) = mpsc::channel();
|
||||||
self.proxy.register_listener(p0.as_raw_fd().into())?;
|
self.proxy.register_listener(p0.as_raw_fd().into())?;
|
||||||
@ -85,7 +85,7 @@ impl Console {
|
|||||||
let _thread = thread::spawn(move || {
|
let _thread = thread::spawn(move || {
|
||||||
let c = zbus::Connection::new_unix_client(p1, false).unwrap();
|
let c = zbus::Connection::new_unix_client(p1, false).unwrap();
|
||||||
let mut s = zbus::ObjectServer::new(&c);
|
let mut s = zbus::ObjectServer::new(&c);
|
||||||
let listener = Listener::new(tx, wait_rx);
|
let listener = ConsoleListener::new(tx, wait_rx);
|
||||||
let err = listener.err();
|
let err = listener.err();
|
||||||
s.at("/org/qemu/Display1/Listener", listener).unwrap();
|
s.at("/org/qemu/Display1/Listener", listener).unwrap();
|
||||||
loop {
|
loop {
|
||||||
@ -106,7 +106,7 @@ impl Console {
|
|||||||
|
|
||||||
#[cfg(feature = "glib")]
|
#[cfg(feature = "glib")]
|
||||||
impl Console {
|
impl Console {
|
||||||
pub fn glib_listen(&self) -> Result<(glib::Receiver<Event>, Sender<()>)> {
|
pub fn glib_listen(&self) -> Result<(glib::Receiver<ConsoleEvent>, Sender<()>)> {
|
||||||
let (p0, p1) = UnixStream::pair()?;
|
let (p0, p1) = UnixStream::pair()?;
|
||||||
let (tx, rx) = glib::MainContext::channel(glib::source::Priority::default());
|
let (tx, rx) = glib::MainContext::channel(glib::source::Priority::default());
|
||||||
self.proxy.register_listener(p0.as_raw_fd().into())?;
|
self.proxy.register_listener(p0.as_raw_fd().into())?;
|
||||||
@ -115,7 +115,7 @@ impl Console {
|
|||||||
let _thread = thread::spawn(move || {
|
let _thread = thread::spawn(move || {
|
||||||
let c = zbus::Connection::new_unix_client(p1, false).unwrap();
|
let c = zbus::Connection::new_unix_client(p1, false).unwrap();
|
||||||
let mut s = zbus::ObjectServer::new(&c);
|
let mut s = zbus::ObjectServer::new(&c);
|
||||||
let listener = Listener::new(tx, wait_rx);
|
let listener = ConsoleListener::new(tx, wait_rx);
|
||||||
let err = listener.err();
|
let err = listener.err();
|
||||||
s.at("/org/qemu/Display1/Listener", listener).unwrap();
|
s.at("/org/qemu/Display1/Listener", listener).unwrap();
|
||||||
loop {
|
loop {
|
||||||
|
@ -54,7 +54,7 @@ impl Drop for ScanoutDMABUF {
|
|||||||
|
|
||||||
// TODO: replace events mpsc with async traits
|
// TODO: replace events mpsc with async traits
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Event {
|
pub enum ConsoleEvent {
|
||||||
Scanout(Scanout),
|
Scanout(Scanout),
|
||||||
Update(Update),
|
Update(Update),
|
||||||
ScanoutDMABUF(ScanoutDMABUF),
|
ScanoutDMABUF(ScanoutDMABUF),
|
||||||
@ -80,31 +80,31 @@ pub enum Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) trait EventSender {
|
pub(crate) trait EventSender {
|
||||||
fn send_event(&self, t: Event) -> Result<(), SendError<Event>>;
|
fn send_event(&self, t: ConsoleEvent) -> Result<(), SendError<ConsoleEvent>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EventSender for Sender<Event> {
|
impl EventSender for Sender<ConsoleEvent> {
|
||||||
fn send_event(&self, t: Event) -> Result<(), SendError<Event>> {
|
fn send_event(&self, t: ConsoleEvent) -> Result<(), SendError<ConsoleEvent>> {
|
||||||
self.send(t)
|
self.send(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "glib")]
|
#[cfg(feature = "glib")]
|
||||||
impl EventSender for glib::Sender<Event> {
|
impl EventSender for glib::Sender<ConsoleEvent> {
|
||||||
fn send_event(&self, t: Event) -> Result<(), SendError<Event>> {
|
fn send_event(&self, t: ConsoleEvent) -> Result<(), SendError<ConsoleEvent>> {
|
||||||
self.send(t)
|
self.send(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct Listener<E: EventSender> {
|
pub(crate) struct ConsoleListener<E: EventSender> {
|
||||||
tx: E,
|
tx: E,
|
||||||
wait_rx: Receiver<()>,
|
wait_rx: Receiver<()>,
|
||||||
err: Arc<RefCell<Option<SendError<Event>>>>,
|
err: Arc<RefCell<Option<SendError<ConsoleEvent>>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[dbus_interface(name = "org.qemu.Display1.Listener")]
|
#[dbus_interface(name = "org.qemu.Display1.Listener")]
|
||||||
impl<E: 'static + EventSender> Listener<E> {
|
impl<E: 'static + EventSender> ConsoleListener<E> {
|
||||||
fn scanout(
|
fn scanout(
|
||||||
&mut self,
|
&mut self,
|
||||||
width: u32,
|
width: u32,
|
||||||
@ -113,7 +113,7 @@ impl<E: 'static + EventSender> Listener<E> {
|
|||||||
format: u32,
|
format: u32,
|
||||||
data: serde_bytes::ByteBuf,
|
data: serde_bytes::ByteBuf,
|
||||||
) {
|
) {
|
||||||
self.send(Event::Scanout(Scanout {
|
self.send(ConsoleEvent::Scanout(Scanout {
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
stride,
|
stride,
|
||||||
@ -132,7 +132,7 @@ impl<E: 'static + EventSender> Listener<E> {
|
|||||||
format: u32,
|
format: u32,
|
||||||
data: serde_bytes::ByteBuf,
|
data: serde_bytes::ByteBuf,
|
||||||
) {
|
) {
|
||||||
self.send(Event::Update(Update {
|
self.send(ConsoleEvent::Update(Update {
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
w,
|
w,
|
||||||
@ -155,7 +155,7 @@ impl<E: 'static + EventSender> Listener<E> {
|
|||||||
y0_top: bool,
|
y0_top: bool,
|
||||||
) {
|
) {
|
||||||
let fd = unsafe { libc::dup(fd.as_raw_fd()) };
|
let fd = unsafe { libc::dup(fd.as_raw_fd()) };
|
||||||
self.send(Event::ScanoutDMABUF(ScanoutDMABUF {
|
self.send(ConsoleEvent::ScanoutDMABUF(ScanoutDMABUF {
|
||||||
fd,
|
fd,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
@ -168,18 +168,18 @@ impl<E: 'static + EventSender> Listener<E> {
|
|||||||
|
|
||||||
#[dbus_interface(name = "UpdateDMABUF")]
|
#[dbus_interface(name = "UpdateDMABUF")]
|
||||||
fn update_dmabuf(&mut self, x: i32, y: i32, w: i32, h: i32) {
|
fn update_dmabuf(&mut self, x: i32, y: i32, w: i32, h: i32) {
|
||||||
self.send(Event::UpdateDMABUF { x, y, w, h });
|
self.send(ConsoleEvent::UpdateDMABUF { x, y, w, h });
|
||||||
if let Err(e) = self.wait() {
|
if let Err(e) = self.wait() {
|
||||||
eprintln!("update returned error: {}", e)
|
eprintln!("update returned error: {}", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mouse_set(&mut self, x: i32, y: i32, on: i32) {
|
fn mouse_set(&mut self, x: i32, y: i32, on: i32) {
|
||||||
self.send(Event::MouseSet { x, y, on })
|
self.send(ConsoleEvent::MouseSet { x, y, on })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cursor_define(&mut self, width: i32, height: i32, hot_x: i32, hot_y: i32, data: Vec<u8>) {
|
fn cursor_define(&mut self, width: i32, height: i32, hot_x: i32, hot_y: i32, data: Vec<u8>) {
|
||||||
self.send(Event::CursorDefine {
|
self.send(ConsoleEvent::CursorDefine {
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
hot_x,
|
hot_x,
|
||||||
@ -189,13 +189,13 @@ impl<E: 'static + EventSender> Listener<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E: EventSender> Listener<E> {
|
impl<E: EventSender> ConsoleListener<E> {
|
||||||
pub(crate) fn new(tx: E, wait_rx: Receiver<()>) -> Self {
|
pub(crate) fn new(tx: E, wait_rx: Receiver<()>) -> Self {
|
||||||
let err = Arc::new(RefCell::new(None));
|
let err = Arc::new(RefCell::new(None));
|
||||||
Listener { tx, wait_rx, err }
|
ConsoleListener { tx, wait_rx, err }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send(&mut self, event: Event) {
|
fn send(&mut self, event: ConsoleEvent) {
|
||||||
if let Err(e) = self.tx.send_event(event) {
|
if let Err(e) = self.tx.send_event(event) {
|
||||||
*self.err.borrow_mut() = Some(e);
|
*self.err.borrow_mut() = Some(e);
|
||||||
}
|
}
|
||||||
@ -205,13 +205,13 @@ impl<E: EventSender> Listener<E> {
|
|||||||
self.wait_rx.recv()
|
self.wait_rx.recv()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn err(&self) -> Arc<RefCell<Option<SendError<Event>>>> {
|
pub fn err(&self) -> Arc<RefCell<Option<SendError<ConsoleEvent>>>> {
|
||||||
self.err.clone()
|
self.err.clone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E: EventSender> Drop for Listener<E> {
|
impl<E: EventSender> Drop for ConsoleListener<E> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
self.send(Event::Disconnected)
|
self.send(ConsoleEvent::Disconnected)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,18 +6,21 @@ pub use error::*;
|
|||||||
mod vm;
|
mod vm;
|
||||||
pub use vm::*;
|
pub use vm::*;
|
||||||
|
|
||||||
|
// mod audio;
|
||||||
|
// pub use audio::*;
|
||||||
|
|
||||||
mod console;
|
mod console;
|
||||||
pub use console::*;
|
pub use console::*;
|
||||||
|
|
||||||
|
mod console_listener;
|
||||||
|
pub use console_listener::*;
|
||||||
|
|
||||||
mod keyboard;
|
mod keyboard;
|
||||||
pub use keyboard::*;
|
pub use keyboard::*;
|
||||||
|
|
||||||
mod mouse;
|
mod mouse;
|
||||||
pub use mouse::*;
|
pub use mouse::*;
|
||||||
|
|
||||||
mod listener;
|
|
||||||
pub use listener::*;
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -7,7 +7,7 @@ use once_cell::sync::OnceCell;
|
|||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
use keycodemap::*;
|
use keycodemap::*;
|
||||||
use qemu_display_listener::{Console, Event, MouseButton};
|
use qemu_display_listener::{Console, ConsoleEvent as Event, MouseButton};
|
||||||
|
|
||||||
mod imp {
|
mod imp {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -4,7 +4,7 @@ use std::sync::{Arc, Mutex};
|
|||||||
use std::{io, thread, time};
|
use std::{io, thread, time};
|
||||||
|
|
||||||
use clap::Clap;
|
use clap::Clap;
|
||||||
use qemu_display_listener::{Console, Event};
|
use qemu_display_listener::{Console, ConsoleEvent};
|
||||||
use vnc::{
|
use vnc::{
|
||||||
server::Event as VncEvent, server::FramebufferUpdate, Error as VncError, PixelFormat, Rect,
|
server::Event as VncEvent, server::FramebufferUpdate, Error as VncError, PixelFormat, Rect,
|
||||||
Server as VncServer,
|
Server as VncServer,
|
||||||
@ -110,7 +110,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
let server = Server::new(console.width()? as u16, console.height()? as u16);
|
let server = Server::new(console.width()? as u16, console.height()? as u16);
|
||||||
|
|
||||||
let _thread = thread::spawn(move || match rx.recv().unwrap() {
|
let _thread = thread::spawn(move || match rx.recv().unwrap() {
|
||||||
Event::ScanoutDMABUF(s) => {
|
ConsoleEvent::ScanoutDMABUF(s) => {
|
||||||
dbg!(&s);
|
dbg!(&s);
|
||||||
unsafe {
|
unsafe {
|
||||||
libc::close(s.fd);
|
libc::close(s.fd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user