eruption_sdk/
connection.rs1use crate::canvas::Canvas;
21use crate::hardware::HotplugInfo;
22use crate::transport::{LocalTransport, ServerStatus, Transport};
23use crate::Result;
24use parking_lot::Mutex;
25use std::sync::Arc;
26
27#[derive(Clone)]
28pub struct Connection {
29 con: Arc<Mutex<dyn Transport>>,
30}
31
32impl Connection {
33 pub fn new(connection_type: ConnectionType) -> Result<Self> {
34 Ok(Self {
35 con: Arc::new(Mutex::new(make_transport(&connection_type)?)),
36 })
37 }
38
39 pub fn connect(&self) -> Result<()> {
40 self.con.lock().connect()
41 }
42
43 pub fn disconnect(&self) -> Result<()> {
44 self.con.lock().disconnect()
45 }
46
47 pub fn submit_canvas(&self, canvas: &Canvas) -> Result<()> {
48 self.con.lock().submit_canvas(canvas)
49 }
50
51 pub fn get_server_status(&self) -> Result<ServerStatus> {
52 self.con.lock().get_server_status()
53 }
54
55 pub fn notify_device_hotplug(&self, hotplug_info: &HotplugInfo) -> Result<()> {
56 self.con.lock().notify_device_hotplug(hotplug_info)
57 }
58}
59
60impl Drop for Connection {
61 fn drop(&mut self) {
62 let _ = self.disconnect();
63 }
64}
65
66#[derive(Debug, Clone)]
68pub enum ConnectionType {
69 Unknown,
71
72 Local,
74
75 Remote,
77}
78
79fn make_transport(_connection_type: &ConnectionType) -> Result<impl Transport> {
80 LocalTransport::new()
81}