MCPcopy Create free account
hub / github.com/buttplugio/buttplug / run

Method run

crates/intiface_engine/src/engine.rs:139–377  ·  view source on GitHub ↗
(
    &self,
    options: &EngineOptions,
    frontend: Option<Arc<dyn Frontend>>,
    dcm: &Option<Arc<DeviceConfigurationManager>>,
  )

Source from the content-addressed store, hash-verified

137 }
138
139 pub async fn run(
140 &self,
141 options: &EngineOptions,
142 frontend: Option<Arc<dyn Frontend>>,
143 dcm: &Option<Arc<DeviceConfigurationManager>>,
144 ) -> Result<(), IntifaceEngineError> {
145 // Set up Frontend
146 if let Some(frontend) = &frontend {
147 let frontend_loop = frontend_external_event_loop(frontend.clone(), self.stop_token.clone());
148 tokio::spawn(async move {
149 frontend_loop.await;
150 });
151
152 frontend.connect().await.unwrap();
153 frontend.send(EngineMessage::EngineStarted {}).await;
154 }
155
156 let mdns_service_metadata =
157 if options.broadcast_server_mdns() && options.websocket_port().is_some() {
158 Some(Arc::new(IntifaceMdnsServiceMetadata::new(
159 options.mdns_suffix().as_deref(),
160 )))
161 } else {
162 None
163 };
164 let mdns_publisher = Arc::new(Mutex::new(None::<IntifaceMdns>));
165 let engine_server_created_sent = Arc::new(AtomicBool::new(false));
166 let on_listener_bound = mdns_service_metadata.as_ref().map(|metadata| {
167 let metadata = Arc::clone(metadata);
168 let frontend = frontend.clone();
169 let mdns_publisher = Arc::clone(&mdns_publisher);
170 let engine_server_created_sent = Arc::clone(&engine_server_created_sent);
171 Arc::new(move |port: u16| {
172 if !engine_server_created_sent.swap(true, Ordering::SeqCst) {
173 let metadata = Arc::clone(&metadata);
174 let frontend = frontend.clone();
175 tokio::spawn(async move {
176 send_engine_server_created(frontend.as_ref(), Some(metadata.as_ref()), Some(port))
177 .await;
178 });
179 }
180 #[cfg(target_os = "ios")]
181 info!("Skipping Rust mDNS publisher on iOS; host app is expected to publish Bonjour");
182 #[cfg(not(target_os = "ios"))]
183 {
184 let mut publisher = mdns_publisher.lock().unwrap();
185 if publisher.is_none() {
186 *publisher = IntifaceMdns::new(metadata.as_ref(), port);
187 }
188 }
189 }) as Arc<dyn Fn(u16) + Send + Sync>
190 });
191
192 // Set up Repeater (if in repeater mode)
193 if options.repeater_mode() {
194 info!("Starting repeater");
195
196 let repeater = ButtplugRepeater::new(

Callers

nothing calls this directly

Calls 15

spawnFunction · 0.85
sleepFunction · 0.85
OkClass · 0.85
setup_buttplug_serverFunction · 0.85
save_user_configFunction · 0.85
maybe_crash_main_threadFunction · 0.85
reset_buttplug_serverFunction · 0.85
cloneMethod · 0.80
broadcast_server_mdnsMethod · 0.80

Tested by

no test coverage detected