Buttplug sex toy control library
at master 1.9 kB view raw
1use buttplug_client::{ 2 ButtplugClient, 3 ButtplugClientEvent, 4 connector::ButtplugRemoteClientConnector, 5 serializer::ButtplugClientJSONSerializer, 6}; 7use buttplug_transport_websocket_tungstenite::ButtplugWebsocketClientTransport; 8use futures::StreamExt; 9 10#[tokio::main] 11async fn main() -> anyhow::Result<()> { 12 // In Rust, anything that will block is awaited. For instance, if we're going 13 // to connect to a remote server, that might take some time due to the network 14 // connection quality, or other issues. To deal with that, we use async/await. 15 // 16 // For now, you can ignore the API calls here, since we're just talking about 17 // how our API works in general. Setting up a connection is discussed more in 18 // the Connecting section of this document. 19 let connector = ButtplugRemoteClientConnector::< 20 ButtplugWebsocketClientTransport, 21 ButtplugClientJSONSerializer, 22 >::new(ButtplugWebsocketClientTransport::new_insecure_connector( 23 "ws://127.0.0.1:12345", 24 )); 25 26 // For Request/Response messages, we'll use our Connect API. Connecting to a 27 // server requires the client and server to send information back and forth, 28 // so we'll await that while those (possibly somewhat slow, depending on if 29 // network is being used and other factors) transfers happen. 30 let client = ButtplugClient::new("Example Client"); 31 client 32 .connect(connector) 33 .await 34 .expect("Can't connect to Buttplug Server, exiting!"); 35 36 let mut event_stream = client.event_stream(); 37 // As an example of event messages, we'll assume the server might 38 // send the client notifications about new devices that it has found. 39 // The client will let us know about this via events. 40 while let Some(event) = event_stream.next().await { 41 if let ButtplugClientEvent::DeviceAdded(device) = event { 42 println!("Device {} connected", device.name()); 43 } 44 } 45 46 Ok(()) 47}