Buttplug sex toy control library
20
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: Make client name resettable

Otherwise reuse of servers will break

+11 -11
+10 -10
buttplug/src/server/server.rs
··· 22 22 future::{self, BoxFuture, FutureExt}, 23 23 Stream, 24 24 }; 25 - use once_cell::sync::OnceCell; 26 25 use std::{ 27 - fmt, 28 - sync::{ 26 + fmt, sync::{ 29 27 atomic::{AtomicBool, Ordering}, 30 28 Arc, 31 - }, 29 + } 32 30 }; 33 - use tokio::sync::broadcast; 31 + use tokio::sync::{broadcast, RwLock}; 34 32 use tokio_stream::StreamExt; 35 33 use tracing_futures::Instrument; 36 34 ··· 58 56 /// [ButtplugServer::event_stream()] method. 59 57 output_sender: broadcast::Sender<ButtplugServerMessageV4>, 60 58 /// Name of the connected client, assuming there is one. 61 - client_name: Arc<OnceCell<String>> 59 + client_name: Arc<RwLock<Option<String>>> 62 60 } 63 61 64 62 impl std::fmt::Debug for ButtplugServer { ··· 80 78 device_manager, 81 79 connected, 82 80 output_sender, 83 - client_name: Arc::new(OnceCell::new()) 81 + client_name: Arc::new(RwLock::new(None)) 84 82 } 85 83 } 86 84 87 - pub fn client_name(&self) -> Option<&String> { 88 - self.client_name.get() 85 + pub fn client_name(&self) -> Option<String> { 86 + self.client_name.try_read().expect("We should never conflict on name access").clone() 89 87 } 90 88 91 89 /// Retreive an async stream of ButtplugServerMessages. This is how the server sends out ··· 234 232 let out_msg = 235 233 message::ServerInfoV2::new(&self.server_name, msg.message_version(), self.max_ping_time); 236 234 let connected = self.connected.clone(); 237 - async move { 235 + let mut name = self.client_name.try_write().expect("We should never conflict on name access"); 236 + *name = Some(msg.client_name().clone()); 237 + async move { 238 238 ping_timer.start_ping_timer().await; 239 239 connected.store(true, Ordering::SeqCst); 240 240 debug!("Server handshake check successful.");
+1 -1
buttplug/src/server/server_downgrade_wrapper.rs
··· 36 36 } 37 37 } 38 38 39 - pub fn client_name(&self) -> Option<&String> { 39 + pub fn client_name(&self) -> Option<String> { 40 40 self.server.client_name() 41 41 } 42 42