Struct intiface_engine::EngineOptions
source · pub struct EngineOptions { /* private fields */ }Implementations§
source§impl EngineOptions
impl EngineOptions
pub fn crash_reporting(&self) -> bool
sourcepub fn websocket_use_all_interfaces(&self) -> bool
pub fn websocket_use_all_interfaces(&self) -> bool
Examples found in repository?
src/engine.rs (line 103)
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
async fn run_server(
server: &ButtplugRemoteServer,
options: &EngineOptions,
) -> Result<(), ButtplugServerConnectorError> {
if let Some(port) = options.websocket_port() {
server
.start(ButtplugRemoteServerConnector::<
_,
ButtplugServerJSONSerializer,
>::new(
ButtplugWebsocketServerTransportBuilder::default()
.port(port)
.listen_on_all_interfaces(options.websocket_use_all_interfaces())
.finish(),
))
.await
} else if let Some(pipe_name) = options.ipc_pipe_name() {
server
.start(ButtplugRemoteServerConnector::<
_,
ButtplugServerJSONSerializer,
>::new(
ButtplugPipeClientTransportBuilder::new(pipe_name).finish(),
))
.await
} else {
panic!("Neither websocket port nor ipc pipe name are set, cannot create transport.");
}
}sourcepub fn websocket_port(&self) -> Option<u16>
pub fn websocket_port(&self) -> Option<u16>
Examples found in repository?
src/engine.rs (line 95)
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
async fn run_server(
server: &ButtplugRemoteServer,
options: &EngineOptions,
) -> Result<(), ButtplugServerConnectorError> {
if let Some(port) = options.websocket_port() {
server
.start(ButtplugRemoteServerConnector::<
_,
ButtplugServerJSONSerializer,
>::new(
ButtplugWebsocketServerTransportBuilder::default()
.port(port)
.listen_on_all_interfaces(options.websocket_use_all_interfaces())
.finish(),
))
.await
} else if let Some(pipe_name) = options.ipc_pipe_name() {
server
.start(ButtplugRemoteServerConnector::<
_,
ButtplugServerJSONSerializer,
>::new(
ButtplugPipeClientTransportBuilder::new(pipe_name).finish(),
))
.await
} else {
panic!("Neither websocket port nor ipc pipe name are set, cannot create transport.");
}
}sourcepub fn frontend_websocket_port(&self) -> Option<u16>
pub fn frontend_websocket_port(&self) -> Option<u16>
Examples found in repository?
src/frontend/mod.rs (line 140)
136 137 138 139 140 141 142 143 144 145 146 147 148
pub async fn setup_frontend(
options: &EngineOptions,
cancellation_token: &Arc<CancellationToken>,
) -> Arc<dyn Frontend> {
if let Some(frontend_websocket_port) = options.frontend_websocket_port() {
Arc::new(WebsocketFrontend::new(
frontend_websocket_port,
cancellation_token.clone(),
))
} else {
Arc::new(NullFrontend::default())
}
}pub fn frontend_in_process_channel(&self) -> bool
sourcepub fn max_ping_time(&self) -> u32
pub fn max_ping_time(&self) -> u32
Examples found in repository?
src/engine.rs (line 55)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
async fn setup_buttplug_server(
options: &EngineOptions,
backdoor_server: &OnceCell<Arc<BackdoorServer>>,
) -> Result<ButtplugRemoteServer, IntifaceEngineError> {
//options::setup_server_device_comm_managers(&mut connector_opts.server_builder);
let mut server_builder = ButtplugServerBuilder::default();
server_builder
.name(options.server_name())
.max_ping_time(options.max_ping_time());
if options.allow_raw_messages() {
server_builder.allow_raw_messages();
}
if let Some(device_config_json) = options.device_config_json() {
server_builder.device_configuration_json(Some(device_config_json.clone()));
}
if let Some(user_device_config_json) = &options.user_device_config_json() {
server_builder.user_device_configuration_json(Some(user_device_config_json.clone()));
}
setup_server_device_comm_managers(options, &mut server_builder);
let core_server = match server_builder.finish() {
Ok(server) => server,
Err(e) => {
error!("Error starting server: {:?}", e);
return Err(IntifaceEngineError::ButtplugServerError(e));
}
};
if backdoor_server
.set(Arc::new(BackdoorServer::new(core_server.device_manager())))
.is_err()
{
Err(
IntifaceError::new("BackdoorServer already initialized somehow! This should never happen!")
.into(),
)
} else {
Ok(ButtplugRemoteServer::new(core_server))
}
}sourcepub fn allow_raw_messages(&self) -> bool
pub fn allow_raw_messages(&self) -> bool
Examples found in repository?
src/engine.rs (line 57)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
async fn setup_buttplug_server(
options: &EngineOptions,
backdoor_server: &OnceCell<Arc<BackdoorServer>>,
) -> Result<ButtplugRemoteServer, IntifaceEngineError> {
//options::setup_server_device_comm_managers(&mut connector_opts.server_builder);
let mut server_builder = ButtplugServerBuilder::default();
server_builder
.name(options.server_name())
.max_ping_time(options.max_ping_time());
if options.allow_raw_messages() {
server_builder.allow_raw_messages();
}
if let Some(device_config_json) = options.device_config_json() {
server_builder.device_configuration_json(Some(device_config_json.clone()));
}
if let Some(user_device_config_json) = &options.user_device_config_json() {
server_builder.user_device_configuration_json(Some(user_device_config_json.clone()));
}
setup_server_device_comm_managers(options, &mut server_builder);
let core_server = match server_builder.finish() {
Ok(server) => server,
Err(e) => {
error!("Error starting server: {:?}", e);
return Err(IntifaceEngineError::ButtplugServerError(e));
}
};
if backdoor_server
.set(Arc::new(BackdoorServer::new(core_server.device_manager())))
.is_err()
{
Err(
IntifaceError::new("BackdoorServer already initialized somehow! This should never happen!")
.into(),
)
} else {
Ok(ButtplugRemoteServer::new(core_server))
}
}sourcepub fn use_bluetooth_le(&self) -> bool
pub fn use_bluetooth_le(&self) -> bool
Examples found in repository?
src/device_communication_managers.rs (line 17)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}sourcepub fn use_serial_port(&self) -> bool
pub fn use_serial_port(&self) -> bool
Examples found in repository?
src/device_communication_managers.rs (line 41)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}pub fn use_hid(&self) -> bool
sourcepub fn use_lovense_dongle_serial(&self) -> bool
pub fn use_lovense_dongle_serial(&self) -> bool
Examples found in repository?
src/device_communication_managers.rs (line 37)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}sourcepub fn use_lovense_dongle_hid(&self) -> bool
pub fn use_lovense_dongle_hid(&self) -> bool
Examples found in repository?
src/device_communication_managers.rs (line 33)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}pub fn use_xinput(&self) -> bool
sourcepub fn use_lovense_connect(&self) -> bool
pub fn use_lovense_connect(&self) -> bool
Examples found in repository?
src/device_communication_managers.rs (line 21)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}sourcepub fn use_device_websocket_server(&self) -> bool
pub fn use_device_websocket_server(&self) -> bool
Examples found in repository?
src/device_communication_managers.rs (line 54)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}sourcepub fn device_websocket_server_port(&self) -> Option<u16>
pub fn device_websocket_server_port(&self) -> Option<u16>
Examples found in repository?
src/device_communication_managers.rs (line 58)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
pub fn setup_server_device_comm_managers(
args: &EngineOptions,
server_builder: &mut ButtplugServerBuilder,
) {
if args.use_bluetooth_le() {
info!("Including Bluetooth LE (btleplug) Device Comm Manager Support");
server_builder.comm_manager(BtlePlugCommunicationManagerBuilder::default());
}
if args.use_lovense_connect() {
info!("Including Lovense Connect App Support");
server_builder.comm_manager(LovenseConnectServiceCommunicationManagerBuilder::default());
}
#[cfg(not(any(target_os = "android", target_os = "ios")))]
{
use buttplug::server::device::hardware::communication::{
lovense_dongle::{
LovenseHIDDongleCommunicationManagerBuilder, LovenseSerialDongleCommunicationManagerBuilder,
},
serialport::SerialPortCommunicationManagerBuilder,
};
if args.use_lovense_dongle_hid() {
info!("Including Lovense HID Dongle Support");
server_builder.comm_manager(LovenseHIDDongleCommunicationManagerBuilder::default());
}
if args.use_lovense_dongle_serial() {
info!("Including Lovense Serial Dongle Support");
server_builder.comm_manager(LovenseSerialDongleCommunicationManagerBuilder::default());
}
if args.use_serial_port() {
info!("Including Serial Port Support");
server_builder.comm_manager(SerialPortCommunicationManagerBuilder::default());
}
#[cfg(target_os = "windows")]
{
use buttplug::server::device::hardware::communication::xinput::XInputDeviceCommunicationManagerBuilder;
if args.use_xinput() {
info!("Including XInput Gamepad Support");
server_builder.comm_manager(XInputDeviceCommunicationManagerBuilder::default());
}
}
}
if args.use_device_websocket_server() {
info!("Including Websocket Server Device Support");
let mut builder =
WebsocketServerDeviceCommunicationManagerBuilder::default().listen_on_all_interfaces(true);
if let Some(port) = args.device_websocket_server_port() {
builder = builder.server_port(port);
}
server_builder.comm_manager(builder);
}
}sourcepub fn crash_main_thread(&self) -> bool
pub fn crash_main_thread(&self) -> bool
sourcepub fn crash_task_thread(&self) -> bool
pub fn crash_task_thread(&self) -> bool
source§impl EngineOptions
impl EngineOptions
pub fn sentry_api_key(&self) -> &Option<String>
sourcepub fn ipc_pipe_name(&self) -> &Option<String>
pub fn ipc_pipe_name(&self) -> &Option<String>
Examples found in repository?
src/engine.rs (line 107)
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
async fn run_server(
server: &ButtplugRemoteServer,
options: &EngineOptions,
) -> Result<(), ButtplugServerConnectorError> {
if let Some(port) = options.websocket_port() {
server
.start(ButtplugRemoteServerConnector::<
_,
ButtplugServerJSONSerializer,
>::new(
ButtplugWebsocketServerTransportBuilder::default()
.port(port)
.listen_on_all_interfaces(options.websocket_use_all_interfaces())
.finish(),
))
.await
} else if let Some(pipe_name) = options.ipc_pipe_name() {
server
.start(ButtplugRemoteServerConnector::<
_,
ButtplugServerJSONSerializer,
>::new(
ButtplugPipeClientTransportBuilder::new(pipe_name).finish(),
))
.await
} else {
panic!("Neither websocket port nor ipc pipe name are set, cannot create transport.");
}
}sourcepub fn device_config_json(&self) -> &Option<String>
pub fn device_config_json(&self) -> &Option<String>
Examples found in repository?
src/engine.rs (line 61)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
async fn setup_buttplug_server(
options: &EngineOptions,
backdoor_server: &OnceCell<Arc<BackdoorServer>>,
) -> Result<ButtplugRemoteServer, IntifaceEngineError> {
//options::setup_server_device_comm_managers(&mut connector_opts.server_builder);
let mut server_builder = ButtplugServerBuilder::default();
server_builder
.name(options.server_name())
.max_ping_time(options.max_ping_time());
if options.allow_raw_messages() {
server_builder.allow_raw_messages();
}
if let Some(device_config_json) = options.device_config_json() {
server_builder.device_configuration_json(Some(device_config_json.clone()));
}
if let Some(user_device_config_json) = &options.user_device_config_json() {
server_builder.user_device_configuration_json(Some(user_device_config_json.clone()));
}
setup_server_device_comm_managers(options, &mut server_builder);
let core_server = match server_builder.finish() {
Ok(server) => server,
Err(e) => {
error!("Error starting server: {:?}", e);
return Err(IntifaceEngineError::ButtplugServerError(e));
}
};
if backdoor_server
.set(Arc::new(BackdoorServer::new(core_server.device_manager())))
.is_err()
{
Err(
IntifaceError::new("BackdoorServer already initialized somehow! This should never happen!")
.into(),
)
} else {
Ok(ButtplugRemoteServer::new(core_server))
}
}sourcepub fn user_device_config_json(&self) -> &Option<String>
pub fn user_device_config_json(&self) -> &Option<String>
Examples found in repository?
src/engine.rs (line 65)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
async fn setup_buttplug_server(
options: &EngineOptions,
backdoor_server: &OnceCell<Arc<BackdoorServer>>,
) -> Result<ButtplugRemoteServer, IntifaceEngineError> {
//options::setup_server_device_comm_managers(&mut connector_opts.server_builder);
let mut server_builder = ButtplugServerBuilder::default();
server_builder
.name(options.server_name())
.max_ping_time(options.max_ping_time());
if options.allow_raw_messages() {
server_builder.allow_raw_messages();
}
if let Some(device_config_json) = options.device_config_json() {
server_builder.device_configuration_json(Some(device_config_json.clone()));
}
if let Some(user_device_config_json) = &options.user_device_config_json() {
server_builder.user_device_configuration_json(Some(user_device_config_json.clone()));
}
setup_server_device_comm_managers(options, &mut server_builder);
let core_server = match server_builder.finish() {
Ok(server) => server,
Err(e) => {
error!("Error starting server: {:?}", e);
return Err(IntifaceEngineError::ButtplugServerError(e));
}
};
if backdoor_server
.set(Arc::new(BackdoorServer::new(core_server.device_manager())))
.is_err()
{
Err(
IntifaceError::new("BackdoorServer already initialized somehow! This should never happen!")
.into(),
)
} else {
Ok(ButtplugRemoteServer::new(core_server))
}
}sourcepub fn server_name(&self) -> &String
pub fn server_name(&self) -> &String
Examples found in repository?
src/engine.rs (line 54)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
async fn setup_buttplug_server(
options: &EngineOptions,
backdoor_server: &OnceCell<Arc<BackdoorServer>>,
) -> Result<ButtplugRemoteServer, IntifaceEngineError> {
//options::setup_server_device_comm_managers(&mut connector_opts.server_builder);
let mut server_builder = ButtplugServerBuilder::default();
server_builder
.name(options.server_name())
.max_ping_time(options.max_ping_time());
if options.allow_raw_messages() {
server_builder.allow_raw_messages();
}
if let Some(device_config_json) = options.device_config_json() {
server_builder.device_configuration_json(Some(device_config_json.clone()));
}
if let Some(user_device_config_json) = &options.user_device_config_json() {
server_builder.user_device_configuration_json(Some(user_device_config_json.clone()));
}
setup_server_device_comm_managers(options, &mut server_builder);
let core_server = match server_builder.finish() {
Ok(server) => server,
Err(e) => {
error!("Error starting server: {:?}", e);
return Err(IntifaceEngineError::ButtplugServerError(e));
}
};
if backdoor_server
.set(Arc::new(BackdoorServer::new(core_server.device_manager())))
.is_err()
{
Err(
IntifaceError::new("BackdoorServer already initialized somehow! This should never happen!")
.into(),
)
} else {
Ok(ButtplugRemoteServer::new(core_server))
}
}sourcepub fn log_level(&self) -> &Option<String>
pub fn log_level(&self) -> &Option<String>
Examples found in repository?
src/engine.rs (line 175)
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
pub async fn run(
&self,
options: &EngineOptions,
external_frontend: Option<Arc<dyn Frontend>>,
) -> Result<(), IntifaceEngineError> {
// At this point we will have received and validated options.
// Set up crash logging for the duration of the server session.
/*
const API_KEY: &str = include_str!(concat!(env!("OUT_DIR"), "/sentry_api_key.txt"));
let sentry_guard = if options.crash_reporting() && !API_KEY.is_empty() {
Some(sentry::init((
API_KEY,
sentry::ClientOptions {
release: sentry::release_name!(),
..Default::default()
},
)))
} else {
None
};
*/
// Create the cancellation tokens for
let frontend_cancellation_token = CancellationToken::new();
let frontend_cancellation_child_token = frontend_cancellation_token.child_token();
// Intiface GUI communicates with its child process via json through stdio.
// Checking for this is the first thing we should do, as any output after this either needs to be
// printed strings or json messages.
let frontend = if let Some(frontend) = external_frontend {
frontend
} else {
setup_frontend(options, &self.stop_token).await
};
let frontend_clone = frontend.clone();
let stop_token_clone = self.stop_token.clone();
tokio::spawn(async move {
frontend_external_event_loop(frontend_clone, stop_token_clone).await;
});
frontend.connect().await.unwrap();
frontend.send(EngineMessage::EngineStarted {}).await;
if let Some(level) = options.log_level() {
setup_frontend_logging(tracing::Level::from_str(level).unwrap(), frontend.clone());
}
// Set up crash logging for the duration of the server session.
#[cfg(feature = "sentry")]
{
if sentry_guard.is_some() {
info!("Using sentry for crash logging.");
} else {
info!("Crash logging disabled.");
}
}
// Hang out until those listeners get sick of listening.
info!("Intiface CLI Setup finished, running server tasks until all joined.");
let server = setup_buttplug_server(options, &self.backdoor_server).await?;
frontend.send(EngineMessage::EngineServerCreated {}).await;
let event_receiver = server.event_stream();
let frontend_clone = frontend.clone();
let stop_child_token = self.stop_token.child_token();
tokio::spawn(async move {
frontend_server_event_loop(event_receiver, frontend_clone, stop_child_token).await;
});
loop {
let session_connection_token = CancellationToken::new();
info!("Starting server");
// Let everything spin up, then try crashing.
#[cfg(debug_assertions)]
maybe_crash_main_thread(options);
let mut exit_requested = false;
select! {
_ = self.stop_token.cancelled() => {
info!("Owner requested process exit, exiting.");
exit_requested = true;
}
_ = frontend_cancellation_child_token.cancelled() => {
info!("Owner requested process exit, exiting.");
exit_requested = true;
}
result = run_server(&server, options) => {
match result {
Ok(_) => info!("Connection dropped, restarting stay open loop."),
Err(e) => {
error!("{}", format!("Process Error: {:?}", e));
frontend
.send(EngineMessage::EngineError{ error: format!("Process Error: {:?}", e).to_owned()})
.await;
exit_requested = true;
}
}
}
};
match server.disconnect().await {
Ok(_) => {
info!("Client forcefully disconnected from server.");
frontend.send(EngineMessage::ClientDisconnected {}).await;
}
Err(_) => info!("Client already disconnected from server."),
};
session_connection_token.cancel();
if exit_requested {
info!("Breaking out of event loop in order to exit");
break;
}
info!("Server connection dropped, restarting");
}
if let Err(e) = server.shutdown().await {
error!("Shutdown failed: {:?}", e);
}
info!("Exiting");
tokio::time::sleep(Duration::from_millis(100)).await;
frontend.send(EngineMessage::EngineStopped {}).await;
frontend.disconnect();
Ok(())
}Trait Implementations§
source§impl Clone for EngineOptions
impl Clone for EngineOptions
source§fn clone(&self) -> EngineOptions
fn clone(&self) -> EngineOptions
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moresource§impl Debug for EngineOptions
impl Debug for EngineOptions
source§impl Default for EngineOptions
impl Default for EngineOptions
source§fn default() -> EngineOptions
fn default() -> EngineOptions
Returns the “default value” for a type. Read more
source§impl From<EngineOptionsExternal> for EngineOptions
impl From<EngineOptionsExternal> for EngineOptions
source§fn from(other: EngineOptionsExternal) -> Self
fn from(other: EngineOptionsExternal) -> Self
Converts to this type from the input type.