···11use crate::{
22 backdoor_server::BackdoorServer,
33- buttplug_server::{run_server, setup_buttplug_server},
33+ buttplug_server::{reset_buttplug_server, run_server, setup_buttplug_server},
44 error::IntifaceEngineError,
55 frontend::{
66 frontend_external_event_loop, frontend_server_event_loop, process_messages::EngineMessage,
···106106107107 // Hang out until those listeners get sick of listening.
108108 info!("Intiface CLI Setup finished, running server tasks until all joined.");
109109- let server = setup_buttplug_server(options, &self.backdoor_server, &dcm).await?;
109109+ let mut server = setup_buttplug_server(options, &self.backdoor_server, &dcm).await?;
110110 let dcm = server
111111 .server()
112112 .device_manager()
···193193 info!("Breaking out of event loop in order to exit");
194194 break;
195195 }
196196+ // We're not exiting, rebuild our server.
197197+ let dm = server.server().device_manager();
198198+ server = reset_buttplug_server(options, &dm, server.event_sender()).await?;
196199 info!("Server connection dropped, restarting");
197200 }
198201 info!("Shutting down server...");
+9-3
crates/intiface_engine/src/remote_server.rs
···2020use serde::{Deserialize, Serialize};
2121use std::sync::Arc;
2222use thiserror::Error;
2323-use tokio::sync::{broadcast, mpsc, Notify};
2323+use tokio::sync::{broadcast::{self, Sender}, mpsc, Notify};
24242525// Clone derived here to satisfy tokio broadcast requirements.
2626#[derive(Clone, Debug, Serialize, Deserialize)]
···4949pub struct ButtplugRemoteServer {
5050 #[getset(get = "pub")]
5151 server: Arc<ButtplugServer>,
5252+ #[getset(get = "pub")]
5253 event_sender: broadcast::Sender<ButtplugRemoteServerEvent>,
5354 disconnect_notifier: Arc<Notify>,
5455}
···210211 ButtplugServerBuilder::default()
211212 .finish()
212213 .expect("Default is infallible"),
214214+ &None
213215 )
214216 }
215217}
216218217219impl ButtplugRemoteServer {
218218- pub fn new(server: ButtplugServer) -> Self {
219219- let (event_sender, _) = broadcast::channel(256);
220220+ pub fn new(server: ButtplugServer, event_sender: &Option<Sender<ButtplugRemoteServerEvent>>) -> Self {
221221+ let event_sender = if let Some(sender) = event_sender {
222222+ sender.clone()
223223+ } else {
224224+ broadcast::channel(256).0
225225+ };
220226 // Thanks to the existence of the backdoor server, device updates can happen for the lifetime to
221227 // the RemoteServer instance, not just during client connect. We need to make sure these are
222228 // emitted to the frontend.