Skip to content

Commit 3aeb056

Browse files
authored
Show startup error when tracker server port is in use (#1596)
1 parent bf2c5d5 commit 3aeb056

File tree

3 files changed

+22
-19
lines changed
  • server
    • android/src/main/java/dev/slimevr/android
    • core/src/main/java/dev/slimevr
    • desktop/src/main/java/dev/slimevr/desktop

3 files changed

+22
-19
lines changed

server/android/src/main/java/dev/slimevr/android/Main.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import dev.slimevr.Keybinding
99
import dev.slimevr.VRServer
1010
import dev.slimevr.android.serial.AndroidSerialHandler
1111
import dev.slimevr.android.tracking.trackers.hid.AndroidHIDManager
12+
import dev.slimevr.config.ConfigManager
1213
import dev.slimevr.tracking.trackers.Tracker
1314
import io.eiren.util.logging.LogManager
1415
import io.ktor.http.CacheControl
@@ -51,8 +52,12 @@ fun main(activity: AppCompatActivity) {
5152
}
5253

5354
try {
55+
val configPath = File(activity.filesDir, "vrconfig.yml").absolutePath
56+
val configManager = ConfigManager(configPath)
57+
configManager.loadConfig()
58+
5459
vrServer = VRServer(
55-
configPath = File(activity.filesDir, "vrconfig.yml").absolutePath,
60+
configManager = configManager,
5661
serialHandlerProvider = { _ -> AndroidSerialHandler(activity) },
5762
acquireMulticastLock = {
5863
val wifi = activity.getSystemService(Context.WIFI_SERVICE) as WifiManager

server/core/src/main/java/dev/slimevr/VRServer.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,9 @@ class VRServer @JvmOverloads constructor(
5656
flashingHandlerProvider: (VRServer) -> SerialFlashingHandler? = { _ -> null },
5757
vrcConfigHandlerProvider: (VRServer) -> VRCConfigHandler = { _ -> VRCConfigHandlerStub() },
5858
acquireMulticastLock: () -> Any? = { null },
59-
// configPath is used by VRWorkout, do not remove!
60-
configPath: String,
59+
@JvmField val configManager: ConfigManager,
6160
) : Thread("VRServer") {
6261

63-
@JvmField
64-
val configManager: ConfigManager
65-
6662
@JvmField
6763
val humanPoseManager: HumanPoseManager
6864
private val trackers: MutableList<Tracker> = FastList()
@@ -119,8 +115,6 @@ class VRServer @JvmOverloads constructor(
119115

120116
init {
121117
// UwU
122-
configManager = ConfigManager(configPath)
123-
configManager.loadConfig()
124118
deviceManager = DeviceManager(this)
125119
serialHandler = serialHandlerProvider(this)
126120
serialFlashingHandler = flashingHandlerProvider(this)

server/desktop/src/main/java/dev/slimevr/desktop/Main.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dev.slimevr.Keybinding
66
import dev.slimevr.SLIMEVR_IDENTIFIER
77
import dev.slimevr.VRServer
88
import dev.slimevr.bridge.Bridge
9+
import dev.slimevr.config.ConfigManager
910
import dev.slimevr.desktop.firmware.DesktopSerialFlashingHandler
1011
import dev.slimevr.desktop.games.vrchat.DesktopVRCConfigHandler
1112
import dev.slimevr.desktop.platform.SteamVRBridge
@@ -27,6 +28,7 @@ import org.apache.commons.lang3.SystemUtils
2728
import java.io.File
2829
import java.io.IOException
2930
import java.lang.System
31+
import java.net.DatagramSocket
3032
import java.net.ServerSocket
3133
import java.nio.file.Files
3234
import java.nio.file.Paths
@@ -96,36 +98,38 @@ fun main(args: Array<String>) {
9698
LogManager.closeLogger()
9799
return
98100
}
101+
102+
val configDir = resolveConfig()
103+
LogManager.info("Using config dir: $configDir")
104+
105+
val configManager = ConfigManager(configDir)
106+
configManager.loadConfig()
107+
99108
try {
100-
// This is disabled because the config can't be read at this point
101-
// ServerSocket(6969).close()
109+
DatagramSocket(configManager.vrConfig.server.trackerPort).close()
102110
ServerSocket(21110).close()
103111
} catch (e: IOException) {
112+
val message = "SlimeVR start-up error! A required port (${configManager.vrConfig.server.trackerPort} and 21110) is busy. " +
113+
"Make sure there is no other instance of SlimeVR Server running."
104114
LogManager
105-
.severe(
106-
"SlimeVR start-up error! Required ports are busy. " +
107-
"Make sure there is no other instance of SlimeVR Server running.",
108-
)
115+
.severe(message)
109116
JOptionPane
110117
.showMessageDialog(
111118
null,
112-
"SlimeVR start-up error! Required ports are busy. " +
113-
"Make sure there is no other instance of SlimeVR Server running.",
119+
message,
114120
"SlimeVR: Ports are busy",
115121
JOptionPane.ERROR_MESSAGE,
116122
)
117123
LogManager.closeLogger()
118124
return
119125
}
120126
try {
121-
val configDir = resolveConfig()
122-
LogManager.info("Using config dir: $configDir")
123127
val vrServer = VRServer(
124128
::provideBridges,
125129
{ _ -> DesktopSerialHandler() },
126130
{ _ -> DesktopSerialFlashingHandler() },
127131
{ _ -> DesktopVRCConfigHandler() },
128-
configPath = configDir,
132+
configManager = configManager,
129133
)
130134
vrServer.start()
131135

0 commit comments

Comments
 (0)