@@ -5,10 +5,11 @@ package dev.slimevr.desktop
5
5
import dev.slimevr.Keybinding
6
6
import dev.slimevr.SLIMEVR_IDENTIFIER
7
7
import dev.slimevr.VRServer
8
- import dev.slimevr.bridge.ISteamVRBridge
8
+ import dev.slimevr.bridge.Bridge
9
9
import dev.slimevr.desktop.firmware.DesktopSerialFlashingHandler
10
10
import dev.slimevr.desktop.platform.SteamVRBridge
11
11
import dev.slimevr.desktop.platform.linux.UnixSocketBridge
12
+ import dev.slimevr.desktop.platform.linux.UnixSocketRpcBridge
12
13
import dev.slimevr.desktop.platform.windows.WindowsNamedPipeBridge
13
14
import dev.slimevr.desktop.serial.DesktopSerialHandler
14
15
import dev.slimevr.desktop.tracking.trackers.hid.TrackersHID
@@ -119,8 +120,7 @@ fun main(args: Array<String>) {
119
120
val configDir = resolveConfig()
120
121
LogManager .info(" Using config dir: $configDir " )
121
122
val vrServer = VRServer (
122
- ::provideSteamVRBridge,
123
- ::provideFeederBridge,
123
+ ::provideBridges,
124
124
{ _ -> DesktopSerialHandler () },
125
125
{ _ -> DesktopSerialFlashingHandler () },
126
126
configPath = configDir,
@@ -151,90 +151,89 @@ fun main(args: Array<String>) {
151
151
}
152
152
}
153
153
154
- fun provideSteamVRBridge (
154
+ fun provideBridges (
155
155
server : VRServer ,
156
156
computedTrackers : List <Tracker >,
157
- ): ISteamVRBridge ? {
158
- val driverBridge: SteamVRBridge ?
159
- if (OperatingSystem .currentPlatform == OperatingSystem .WINDOWS ) {
160
- // Create named pipe bridge for SteamVR driver
161
- driverBridge = WindowsNamedPipeBridge (
162
- server,
163
- " steamvr" ,
164
- " SteamVR Driver Bridge" ,
165
- """ \\.\pipe\SlimeVRDriver""" ,
166
- computedTrackers,
167
- )
168
- } else if (OperatingSystem .currentPlatform == OperatingSystem .LINUX ) {
169
- var linuxBridge: SteamVRBridge ? = null
170
- try {
171
- linuxBridge = UnixSocketBridge (
172
- server,
173
- " steamvr" ,
174
- " SteamVR Driver Bridge" ,
175
- Paths .get(OperatingSystem .socketDirectory, " SlimeVRDriver" )
176
- .toString(),
177
- computedTrackers,
178
- )
179
- } catch (ex: Exception ) {
180
- LogManager .severe(
181
- " Failed to initiate Unix socket, disabling driver bridge..." ,
182
- ex,
183
- )
184
- }
185
- driverBridge = linuxBridge
186
- if (driverBridge != null ) {
187
- // Close the named socket on shutdown, or otherwise it's not going to get removed
188
- Runtime .getRuntime().addShutdownHook(
189
- Thread {
190
- try {
191
- (driverBridge as ? UnixSocketBridge )?.close()
192
- } catch (e: Exception ) {
193
- throw RuntimeException (e)
194
- }
195
- },
196
- )
197
- }
198
- } else {
199
- driverBridge = null
200
- }
201
-
202
- return driverBridge
203
- }
204
-
205
- fun provideFeederBridge (
206
- server : VRServer ,
207
- ): ISteamVRBridge ? {
208
- val feederBridge: SteamVRBridge ?
157
+ ): Sequence <Bridge > = sequence {
209
158
when (OperatingSystem .currentPlatform) {
210
159
OperatingSystem .WINDOWS -> {
160
+ // Create named pipe bridge for SteamVR driver
161
+ yield (
162
+ WindowsNamedPipeBridge (
163
+ server,
164
+ " steamvr" ,
165
+ " SteamVR Driver Bridge" ,
166
+ """ \\.\pipe\SlimeVRDriver""" ,
167
+ computedTrackers,
168
+ ),
169
+ )
170
+
211
171
// Create named pipe bridge for SteamVR input
212
- feederBridge = WindowsNamedPipeBridge (
213
- server,
214
- " steamvr_feeder" ,
215
- " SteamVR Feeder Bridge" ,
216
- """ \\.\pipe\SlimeVRInput""" ,
217
- FastList (),
172
+ yield (
173
+ WindowsNamedPipeBridge (
174
+ server,
175
+ " steamvr_feeder" ,
176
+ " SteamVR Feeder Bridge" ,
177
+ """ \\.\pipe\SlimeVRInput""" ,
178
+ FastList (),
179
+ ),
218
180
)
219
181
}
220
182
221
183
OperatingSystem .LINUX -> {
222
- feederBridge = UnixSocketBridge (
223
- server,
224
- " steamvr_feeder" ,
225
- " SteamVR Feeder Bridge" ,
226
- Paths .get(OperatingSystem .socketDirectory, " SlimeVRInput" )
227
- .toString(),
228
- FastList (),
184
+ var linuxBridge: SteamVRBridge ? = null
185
+ try {
186
+ linuxBridge = UnixSocketBridge (
187
+ server,
188
+ " steamvr" ,
189
+ " SteamVR Driver Bridge" ,
190
+ Paths .get(OperatingSystem .socketDirectory, " SlimeVRDriver" )
191
+ .toString(),
192
+ computedTrackers,
193
+ )
194
+ } catch (ex: Exception ) {
195
+ LogManager .severe(
196
+ " Failed to initiate Unix socket, disabling driver bridge..." ,
197
+ ex,
198
+ )
199
+ }
200
+ if (linuxBridge != null ) {
201
+ // Close the named socket on shutdown, or otherwise it's not going to get removed
202
+ Runtime .getRuntime().addShutdownHook(
203
+ Thread {
204
+ try {
205
+ (linuxBridge as ? UnixSocketBridge )?.close()
206
+ } catch (e: Exception ) {
207
+ throw RuntimeException (e)
208
+ }
209
+ },
210
+ )
211
+ yield (linuxBridge)
212
+ }
213
+
214
+ yield (
215
+ UnixSocketBridge (
216
+ server,
217
+ " steamvr_feeder" ,
218
+ " SteamVR Feeder Bridge" ,
219
+ Paths .get(OperatingSystem .socketDirectory, " SlimeVRInput" )
220
+ .toString(),
221
+ FastList (),
222
+ ),
229
223
)
230
- }
231
224
232
- else -> {
233
- feederBridge = null
225
+ yield (
226
+ UnixSocketRpcBridge (
227
+ server,
228
+ Paths .get(OperatingSystem .socketDirectory, " SlimeVRRpc" )
229
+ .toString(),
230
+ computedTrackers,
231
+ ),
232
+ )
234
233
}
235
- }
236
234
237
- return feederBridge
235
+ else -> {}
236
+ }
238
237
}
239
238
240
239
const val CONFIG_FILENAME = " vrconfig.yml"
0 commit comments