( options: &EngineOptions, backdoor_server: &OnceCell<Arc<BackdoorServer>>, dcm: &Option<Arc<DeviceConfigurationManager>>, )
| 106 | } |
| 107 | |
| 108 | pub async fn setup_buttplug_server( |
| 109 | options: &EngineOptions, |
| 110 | backdoor_server: &OnceCell<Arc<BackdoorServer>>, |
| 111 | dcm: &Option<Arc<DeviceConfigurationManager>>, |
| 112 | ) -> Result<ButtplugServer, IntifaceEngineError> { |
| 113 | let mut dm_builder = if let Some(dcm) = dcm { |
| 114 | ServerDeviceManagerBuilder::new_with_arc(dcm.clone()) |
| 115 | } else { |
| 116 | let mut dcm_builder = load_protocol_configs( |
| 117 | options.device_config_json(), |
| 118 | options.user_device_config_json(), |
| 119 | false, |
| 120 | ) |
| 121 | .map_err(|e| IntifaceEngineError::ButtplugError(e.into()))?; |
| 122 | |
| 123 | ServerDeviceManagerBuilder::new( |
| 124 | dcm_builder |
| 125 | .finish() |
| 126 | .map_err(|e| IntifaceEngineError::ButtplugError(e.into()))?, |
| 127 | ) |
| 128 | }; |
| 129 | |
| 130 | setup_server_device_comm_managers(options, &mut dm_builder); |
| 131 | if options.emit_output_observations() { |
| 132 | dm_builder.emit_output_observations(true); |
| 133 | } |
| 134 | let mut server_builder = ButtplugServerBuilder::new( |
| 135 | dm_builder |
| 136 | .finish() |
| 137 | .map_err(IntifaceEngineError::ButtplugServerError)?, |
| 138 | ); |
| 139 | |
| 140 | server_builder |
| 141 | .name(options.server_name()) |
| 142 | .max_ping_time(options.max_ping_time()); |
| 143 | |
| 144 | let core_server = match server_builder.finish() { |
| 145 | Ok(server) => server, |
| 146 | Err(e) => { |
| 147 | error!("Error starting server: {:?}", e); |
| 148 | return Err(IntifaceEngineError::ButtplugServerError(e)); |
| 149 | } |
| 150 | }; |
| 151 | if backdoor_server |
| 152 | .set(Arc::new(BackdoorServer::new(core_server.device_manager()))) |
| 153 | .is_err() |
| 154 | { |
| 155 | Err( |
| 156 | IntifaceError::new("BackdoorServer already initialized somehow! This should never happen!") |
| 157 | .into(), |
| 158 | ) |
| 159 | } else { |
| 160 | Ok(core_server) |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | pub async fn run_server( |
| 165 | server: &ButtplugRemoteServer, |
no test coverage detected