diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 000000000..f46ea758e --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,21 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:0.20.2") + } +} + +plugins { + kotlin("jvm") apply false +} + +subprojects { + plugins.apply("kotlinx-atomicfu") +} + +repositories { + mavenCentral() +} + diff --git a/gradle.properties b/gradle.properties index 06429c156..a0c773ecf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,3 +12,8 @@ kotlinx.atomicfu.enableJvmIrTransformation=true android.useAndroidX=true android.nonTransitiveRClass=true org.gradle.unsafe.configuration-cache=true + +kotlinVersion=1.8.21 +spotlessVersion=6.12.0 +shadowJarVersion=8.1.1 +buildconfigVersion=4.0.4 diff --git a/server/.gitignore b/server/.gitignore index 04afb1c20..2e82b429c 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -21,4 +21,4 @@ Load AutoBone Recordings logs/ # Android -/src/main/resources/web-gui/ +/core/src/main/resources/web-gui/ diff --git a/server/android/.gitignore b/server/android/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/server/android/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/server/build.gradle.kts b/server/android/build.gradle.kts similarity index 61% rename from server/build.gradle.kts rename to server/android/build.gradle.kts index 8238865d3..82b3c20a2 100644 --- a/server/build.gradle.kts +++ b/server/android/build.gradle.kts @@ -9,12 +9,11 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.io.ByteArrayOutputStream plugins { - kotlin("plugin.serialization") version "1.8.21" - id("com.diffplug.spotless") version "6.12.0" - id("com.github.gmazzo.buildconfig") version "3.1.0" + kotlin("plugin.serialization") + id("com.github.gmazzo.buildconfig") id("com.android.application") version "8.0.2" - id("org.jetbrains.kotlin.android") version "1.8.21" + id("org.jetbrains.kotlin.android") } kotlin { @@ -60,35 +59,10 @@ allprojects { } dependencies { - implementation(project(":solarxr-protocol")) + implementation(project(":server:core")) - // This dependency is used internally, - // and not exposed to consumers on their own compile classpath. - implementation("com.google.flatbuffers:flatbuffers-java:22.10.26") implementation("commons-cli:commons-cli:1.5.0") - implementation("com.fasterxml.jackson.core:jackson-databind:2.15.1") - implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.1") - - implementation("com.github.jonpeterson:jackson-module-model-versioning:1.2.2") - implementation("org.apache.commons:commons-math3:3.6.1") implementation("org.apache.commons:commons-lang3:3.12.0") - implementation("org.apache.commons:commons-collections4:4.4") - - implementation("net.java.dev.jna:jna:5.+") - implementation("net.java.dev.jna:jna-platform:5.+") - implementation("com.illposed.osc:javaosc-core:0.8") - implementation("com.fazecast:jSerialComm:2.+") - implementation("com.google.protobuf:protobuf-java:3.21.12") - implementation("org.java-websocket:Java-WebSocket:1.+") - implementation("com.melloware:jintellitype:1.+") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") - implementation("it.unimi.dsi:fastutil:8.5.12") - - testImplementation(kotlin("test")) - // Use JUnit test framework - testImplementation(platform("org.junit:junit-bom:5.9.0")) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.junit.platform:junit-platform-launcher") // Android stuff implementation("androidx.appcompat:appcompat:1.6.1") @@ -203,64 +177,9 @@ buildConfig { val gitVersionTag = "git --no-pager tag --points-at HEAD".runCommand().trim() val gitClean = "git status --porcelain".runCommand().trim().isEmpty() useKotlinOutput { topLevelConstants = true } - packageName("dev.slimevr") + packageName("dev.slimevr.android") buildConfigField("String", "GIT_COMMIT_HASH", "\"${gitCommitHash}\"") buildConfigField("String", "GIT_VERSION_TAG", "\"${gitVersionTag}\"") buildConfigField("boolean", "GIT_CLEAN", gitClean.toString()) } - -configure { - // optional: limit format enforcement to just the files changed by this feature branch - // ratchetFrom "origin/main" - - format("misc") { - // define the files to apply `misc` to - target("*.gradle", "*.md", ".gitignore") - - // define the steps to apply to those files - trimTrailingWhitespace() - endWithNewline() - indentWithTabs() - } - // format "yaml", { - // target "*.yml", "*.yaml", - - // trimTrailingWhitespace() - // endWithNewline() - // indentWithSpaces(2) // YAML cannot contain tabs: https://yaml.org/faq.html - // } - - // .editorconfig doesn't work so, manual override - // https://github.com/diffplug/spotless/issues/142 - val editorConfig = - mapOf( - "indent_size" to 4, - "indent_style" to "tab", -// "max_line_length" to 88, - "ktlint_experimental" to "enabled", - "ij_kotlin_packages_to_use_import_on_demand" to - "java.util.*,kotlin.math.*,dev.slimevr.autobone.errors.*,io.github.axisangles.ktmath.*,kotlinx.atomicfu.*", - "ij_kotlin_allow_trailing_comma" to true - ) - val ktlintVersion = "0.47.1" - kotlinGradle { - target("*.gradle.kts") // default target for kotlinGradle - ktlint(ktlintVersion) - .setUseExperimental(true) - .editorConfigOverride(editorConfig) - } - kotlin { - targetExclude("build/**/**.kt") - ktlint(ktlintVersion) - .setUseExperimental(true) - .editorConfigOverride(editorConfig) - } - java { - targetExclude("**/BuildConfig.java") - - removeUnusedImports() - // Use eclipse JDT formatter - eclipse().configFile("spotless.xml") - } -} diff --git a/server/proguard-rules.pro b/server/android/proguard-rules.pro similarity index 100% rename from server/proguard-rules.pro rename to server/android/proguard-rules.pro diff --git a/server/src/main/AndroidManifest.xml b/server/android/src/main/AndroidManifest.xml similarity index 95% rename from server/src/main/AndroidManifest.xml rename to server/android/src/main/AndroidManifest.xml index 5b4d5c2b2..a43d2f732 100644 --- a/server/src/main/AndroidManifest.xml +++ b/server/android/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ tools:targetApi="33" android:usesCleartextTraffic="true"> diff --git a/server/src/main/ic_launcher-playstore.png b/server/android/src/main/ic_launcher-playstore.png similarity index 100% rename from server/src/main/ic_launcher-playstore.png rename to server/android/src/main/ic_launcher-playstore.png diff --git a/server/src/main/java/dev/slimevr/Main.kt b/server/android/src/main/java/dev/slimevr/android/Main.kt similarity index 96% rename from server/src/main/java/dev/slimevr/Main.kt rename to server/android/src/main/java/dev/slimevr/android/Main.kt index 412c52b3c..1d543beca 100644 --- a/server/src/main/java/dev/slimevr/Main.kt +++ b/server/android/src/main/java/dev/slimevr/android/Main.kt @@ -1,8 +1,9 @@ @file:JvmName("Main") -package dev.slimevr +package dev.slimevr.android import androidx.appcompat.app.AppCompatActivity +import dev.slimevr.VRServer import io.eiren.util.logging.LogManager import io.ktor.http.CacheControl import io.ktor.http.CacheControl.Visibility diff --git a/server/src/main/java/dev/slimevr/MainActivity.kt b/server/android/src/main/java/dev/slimevr/android/MainActivity.kt similarity index 97% rename from server/src/main/java/dev/slimevr/MainActivity.kt rename to server/android/src/main/java/dev/slimevr/android/MainActivity.kt index f866562d2..ce84488d5 100644 --- a/server/src/main/java/dev/slimevr/MainActivity.kt +++ b/server/android/src/main/java/dev/slimevr/android/MainActivity.kt @@ -1,9 +1,10 @@ -package dev.slimevr +package dev.slimevr.android import android.os.Bundle import android.webkit.WebSettings import android.webkit.WebView import androidx.appcompat.app.AppCompatActivity +import dev.slimevr.R import io.eiren.util.logging.LogManager class MainActivity : AppCompatActivity() { diff --git a/server/src/main/res/drawable/ic_launcher_foreground.xml b/server/android/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from server/src/main/res/drawable/ic_launcher_foreground.xml rename to server/android/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/server/src/main/res/layout/activity_main.xml b/server/android/src/main/res/layout/activity_main.xml similarity index 93% rename from server/src/main/res/layout/activity_main.xml rename to server/android/src/main/res/layout/activity_main.xml index 705ff9e59..e1244028b 100644 --- a/server/src/main/res/layout/activity_main.xml +++ b/server/android/src/main/res/layout/activity_main.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + tools:context=".android.MainActivity"> { + kotlinOptions.jvmTarget = "11" +} + +// Set compiler to use UTF-8 +tasks.withType { + options.encoding = "UTF-8" +} +tasks.withType { + systemProperty("file.encoding", "UTF-8") +} +tasks.withType { + options.encoding = "UTF-8" +} + +tasks + .withType>() + .configureEach { + compilerOptions + .languageVersion + .set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + ) + } + +allprojects { + repositories { + // Use jcenter for resolving dependencies. + // You can declare any Maven/Ivy/file repository here. + mavenCentral() + } +} + +dependencies { + implementation(project(":solarxr-protocol")) + + // This dependency is used internally, + // and not exposed to consumers on their own compile classpath. + implementation("com.google.flatbuffers:flatbuffers-java:22.10.26") + implementation("commons-cli:commons-cli:1.5.0") + implementation("com.fasterxml.jackson.core:jackson-databind:2.15.1") + implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.1") + + implementation("com.github.jonpeterson:jackson-module-model-versioning:1.2.2") + implementation("org.apache.commons:commons-math3:3.6.1") + implementation("org.apache.commons:commons-lang3:3.12.0") + implementation("org.apache.commons:commons-collections4:4.4") + + implementation("net.java.dev.jna:jna:5.+") + implementation("net.java.dev.jna:jna-platform:5.+") + implementation("com.illposed.osc:javaosc-core:0.8") + implementation("com.fazecast:jSerialComm:2.+") + implementation("com.google.protobuf:protobuf-java:3.21.12") + implementation("org.java-websocket:Java-WebSocket:1.+") + implementation("com.melloware:jintellitype:1.+") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") + implementation("it.unimi.dsi:fastutil:8.5.12") + + testImplementation(kotlin("test")) + // Use JUnit test framework + testImplementation(platform("org.junit:junit-bom:5.9.0")) + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.junit.platform:junit-platform-launcher") +} +tasks.test { + useJUnitPlatform() +} + +fun String.runCommand(currentWorkingDir: File = file("./")): String { + val byteOut = ByteArrayOutputStream() + project.exec { + workingDir = currentWorkingDir + commandLine = this@runCommand.split("\\s".toRegex()) + standardOutput = byteOut + } + return String(byteOut.toByteArray()).trim() +} + +configure { + // optional: limit format enforcement to just the files changed by this feature branch + // ratchetFrom "origin/main" + + format("misc") { + // define the files to apply `misc` to + target("*.gradle", "*.md", ".gitignore") + + // define the steps to apply to those files + trimTrailingWhitespace() + endWithNewline() + indentWithTabs() + } + // format "yaml", { + // target "*.yml", "*.yaml", + + // trimTrailingWhitespace() + // endWithNewline() + // indentWithSpaces(2) // YAML cannot contain tabs: https://yaml.org/faq.html + // } + + // .editorconfig doesn't work so, manual override + // https://github.com/diffplug/spotless/issues/142 + val editorConfig = + mapOf( + "indent_size" to 4, + "indent_style" to "tab", +// "max_line_length" to 88, + "ktlint_experimental" to "enabled", + "ij_kotlin_packages_to_use_import_on_demand" to + "java.util.*,kotlin.math.*,dev.slimevr.autobone.errors.*,io.github.axisangles.ktmath.*,kotlinx.atomicfu.*", + "ij_kotlin_allow_trailing_comma" to true + ) + val ktlintVersion = "0.47.1" + kotlinGradle { + target("*.gradle.kts") // default target for kotlinGradle + ktlint(ktlintVersion) + .setUseExperimental(true) + .editorConfigOverride(editorConfig) + } + kotlin { + targetExclude("build/**/**.kt") + ktlint(ktlintVersion) + .setUseExperimental(true) + .editorConfigOverride(editorConfig) + } + java { + targetExclude("**/BuildConfig.java") + + removeUnusedImports() + // Use eclipse JDT formatter + eclipse().configFile("spotless.xml") + } +} diff --git a/server/protobuf_update.bat b/server/core/protobuf_update.bat similarity index 100% rename from server/protobuf_update.bat rename to server/core/protobuf_update.bat diff --git a/server/resources/LICENSE.txt b/server/core/resources/LICENSE.txt similarity index 100% rename from server/resources/LICENSE.txt rename to server/core/resources/LICENSE.txt diff --git a/server/resources/ThirdPartyNotices.txt b/server/core/resources/ThirdPartyNotices.txt similarity index 100% rename from server/resources/ThirdPartyNotices.txt rename to server/core/resources/ThirdPartyNotices.txt diff --git a/server/resources/firewall.bat b/server/core/resources/firewall.bat similarity index 100% rename from server/resources/firewall.bat rename to server/core/resources/firewall.bat diff --git a/server/resources/firewall_uninstall.bat b/server/core/resources/firewall_uninstall.bat similarity index 100% rename from server/resources/firewall_uninstall.bat rename to server/core/resources/firewall_uninstall.bat diff --git a/server/resources/run.bat b/server/core/resources/run.bat similarity index 100% rename from server/resources/run.bat rename to server/core/resources/run.bat diff --git a/server/spotless.xml b/server/core/spotless.xml similarity index 100% rename from server/spotless.xml rename to server/core/spotless.xml diff --git a/server/src/main/java/com/jme3/math/FastMath.java b/server/core/src/main/java/com/jme3/math/FastMath.java similarity index 100% rename from server/src/main/java/com/jme3/math/FastMath.java rename to server/core/src/main/java/com/jme3/math/FastMath.java diff --git a/server/src/main/java/com/jme3/system/NanoTimer.java b/server/core/src/main/java/com/jme3/system/NanoTimer.java similarity index 100% rename from server/src/main/java/com/jme3/system/NanoTimer.java rename to server/core/src/main/java/com/jme3/system/NanoTimer.java diff --git a/server/src/main/java/com/jme3/system/Timer.java b/server/core/src/main/java/com/jme3/system/Timer.java similarity index 100% rename from server/src/main/java/com/jme3/system/Timer.java rename to server/core/src/main/java/com/jme3/system/Timer.java diff --git a/server/src/main/java/dev/slimevr/Keybinding.java b/server/core/src/main/java/dev/slimevr/Keybinding.java similarity index 90% rename from server/src/main/java/dev/slimevr/Keybinding.java rename to server/core/src/main/java/dev/slimevr/Keybinding.java index 6ee6ead45..c353cb46e 100644 --- a/server/src/main/java/dev/slimevr/Keybinding.java +++ b/server/core/src/main/java/dev/slimevr/Keybinding.java @@ -22,7 +22,7 @@ public class Keybinding implements HotkeyListener { public Keybinding(VRServer server) { this.server = server; - this.config = server.getConfigManager().getVrConfig().getKeybindings(); + this.config = server.configManager.getVrConfig().getKeybindings(); if (OperatingSystem.getCurrentPlatform() != OperatingSystem.WINDOWS) { LogManager @@ -61,15 +61,15 @@ public class Keybinding implements HotkeyListener { public void onHotKey(int identifier) { switch (identifier) { case FULL_RESET -> { - server.getResetHandler().sendStarted(ResetType.Full); + server.resetHandler.sendStarted(ResetType.Full); server.scheduleResetTrackersFull(resetSourceName, this.config.getFullResetDelay()); } case YAW_RESET -> { - server.getResetHandler().sendStarted(ResetType.Yaw); + server.resetHandler.sendStarted(ResetType.Yaw); server.scheduleResetTrackersYaw(resetSourceName, this.config.getYawResetDelay()); } case MOUNTING_RESET -> { - server.getResetHandler().sendStarted(ResetType.Mounting); + server.resetHandler.sendStarted(ResetType.Mounting); server .scheduleResetTrackersMounting( resetSourceName, diff --git a/server/src/main/java/dev/slimevr/NetworkProtocol.java b/server/core/src/main/java/dev/slimevr/NetworkProtocol.java similarity index 100% rename from server/src/main/java/dev/slimevr/NetworkProtocol.java rename to server/core/src/main/java/dev/slimevr/NetworkProtocol.java diff --git a/server/core/src/main/java/dev/slimevr/VRServer.kt b/server/core/src/main/java/dev/slimevr/VRServer.kt new file mode 100644 index 000000000..6a9aaceac --- /dev/null +++ b/server/core/src/main/java/dev/slimevr/VRServer.kt @@ -0,0 +1,424 @@ +package dev.slimevr + +import com.jme3.system.NanoTimer +import dev.slimevr.autobone.AutoBoneHandler +import dev.slimevr.bridge.Bridge +import dev.slimevr.config.ConfigManager +import dev.slimevr.osc.OSCHandler +import dev.slimevr.osc.OSCRouter +import dev.slimevr.osc.VMCHandler +import dev.slimevr.osc.VRCOSCHandler +import dev.slimevr.platform.SteamVRBridge +import dev.slimevr.platform.linux.UnixSocketBridge +import dev.slimevr.platform.windows.WindowsNamedPipeBridge +import dev.slimevr.posestreamer.BVHRecorder +import dev.slimevr.protocol.ProtocolAPI +import dev.slimevr.reset.ResetHandler +import dev.slimevr.serial.ProvisioningHandler +import dev.slimevr.serial.SerialHandler +import dev.slimevr.setup.TapSetupHandler +import dev.slimevr.status.StatusSystem +import dev.slimevr.tracking.processor.HumanPoseManager +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton +import dev.slimevr.tracking.trackers.DeviceManager +import dev.slimevr.tracking.trackers.Tracker +import dev.slimevr.tracking.trackers.TrackerPosition +import dev.slimevr.tracking.trackers.udp.TrackersUDPServer +import dev.slimevr.util.ann.VRServerThread +import dev.slimevr.websocketapi.WebSocketVRBridge +import io.eiren.util.OperatingSystem +import io.eiren.util.ann.ThreadSafe +import io.eiren.util.ann.ThreadSecure +import io.eiren.util.collections.FastList +import io.eiren.util.logging.LogManager +import solarxr_protocol.datatypes.TrackerIdT +import java.nio.file.Paths +import java.util.* +import java.util.concurrent.LinkedBlockingQueue +import java.util.concurrent.atomic.AtomicInteger +import java.util.function.Consumer + +class VRServer @JvmOverloads constructor(configPath: String? = "vrconfig.yml") : Thread("VRServer") { + @JvmField + val humanPoseManager: HumanPoseManager + val hmdTracker: Tracker + private val trackers: MutableList = FastList() + val trackersServer: TrackersUDPServer + private val bridges: MutableList = FastList() + private val tasks: Queue = LinkedBlockingQueue() + private val newTrackersConsumers: MutableList> = FastList() + private val onTick: MutableList = FastList() + val oSCRouter: OSCRouter + @JvmField + val vrcOSCHandler: VRCOSCHandler + val vMCHandler: VMCHandler + @JvmField + val deviceManager: DeviceManager + @JvmField + val bvhRecorder: BVHRecorder + @JvmField + val serialHandler: SerialHandler + @JvmField + val autoBoneHandler: AutoBoneHandler + @JvmField + val tapSetupHandler: TapSetupHandler + @JvmField + val protocolAPI: ProtocolAPI + @JvmField + val configManager: ConfigManager + private val timer = Timer() + val fpsTimer = NanoTimer() + @JvmField + val provisioningHandler: ProvisioningHandler + @JvmField + val resetHandler: ResetHandler + @JvmField + val statusSystem = StatusSystem() + + /** + * This function is used by VRWorkout, do not remove! + */ + init { + // UwU + configManager = ConfigManager(configPath) + configManager.loadConfig() + deviceManager = DeviceManager(this) + serialHandler = SerialHandler() + provisioningHandler = ProvisioningHandler(this) + resetHandler = ResetHandler() + tapSetupHandler = TapSetupHandler() + autoBoneHandler = AutoBoneHandler(this) + protocolAPI = ProtocolAPI(this) + hmdTracker = Tracker( + null, + 0, + "HMD", + "HMD", + TrackerPosition.HEAD, + null, + true, + true, + false, + false, + false, + true + ) + humanPoseManager = HumanPoseManager(this) + val computedTrackers = humanPoseManager.computedTrackers + + // Start server for SlimeVR trackers + val trackerPort = configManager.vrConfig.server.trackerPort + LogManager.info("Starting the tracker server on port $trackerPort...") + trackersServer = TrackersUDPServer( + trackerPort, + "Sensors UDP server" + ) { tracker: Tracker -> registerTracker(tracker) } + val driverBridge: SteamVRBridge? + if (OperatingSystem.getCurrentPlatform() == OperatingSystem.WINDOWS) { + + // Create named pipe bridge for SteamVR driver + driverBridge = WindowsNamedPipeBridge( + this, + hmdTracker, + "steamvr", + "SteamVR Driver Bridge", + "\\\\.\\pipe\\SlimeVRDriver", + computedTrackers + ) + tasks.add(Runnable { driverBridge.startBridge() }) + bridges.add(driverBridge) + + // Create named pipe bridge for SteamVR input + // TODO: how do we want to handle HMD input from the feeder app? + val feederBridge = WindowsNamedPipeBridge( + this, + null, + "steamvr_feeder", + "SteamVR Feeder Bridge", + "\\\\.\\pipe\\SlimeVRInput", + FastList() + ) + tasks.add(Runnable { feederBridge.startBridge() }) + bridges.add(feederBridge) + } else if (OperatingSystem.getCurrentPlatform() == OperatingSystem.LINUX) { + var linuxBridge: SteamVRBridge? = null + try { + linuxBridge = UnixSocketBridge( + this, + hmdTracker, + "steamvr", + "SteamVR Driver Bridge", + Paths.get(OperatingSystem.getTempDirectory(), "SlimeVRDriver").toString(), + computedTrackers + ) + } catch (ex: Exception) { + LogManager.severe("Failed to initiate Unix socket, disabling driver bridge...", ex) + } + driverBridge = linuxBridge + if (driverBridge != null) { + tasks.add(Runnable { driverBridge.startBridge() }) + bridges.add(driverBridge) + } + try { + val feederBridge: SteamVRBridge = UnixSocketBridge( + this, + null, + "steamvr_feeder", + "SteamVR Feeder Bridge", + Paths.get(OperatingSystem.getTempDirectory(), "SlimeVRInput").toString(), + FastList() + ) + tasks.add(Runnable { feederBridge.startBridge() }) + bridges.add(feederBridge) + } catch (ex: Exception) { + LogManager.severe("Failed to initiate Unix socket, disabling feeder bridge...", ex) + } + } else { + driverBridge = null + } + + // Add shutdown hook + Runtime.getRuntime().addShutdownHook(Thread { + try { + (driverBridge as? UnixSocketBridge)?.close() + } catch (e: Exception) { + throw RuntimeException(e) + } + }) + + // Create WebSocket server + val wsBridge = WebSocketVRBridge(hmdTracker, computedTrackers, this) + tasks.add(Runnable { wsBridge.startBridge() }) + bridges.add(wsBridge) + + // Initialize OSC handlers + vrcOSCHandler = VRCOSCHandler( + this, + humanPoseManager, + driverBridge, + configManager.vrConfig.vrcOSC, + computedTrackers + ) + vMCHandler = VMCHandler( + this, + humanPoseManager, + configManager.vrConfig.vmc, + computedTrackers + ) + + // Initialize OSC router + val oscHandlers = FastList() + oscHandlers.add(vrcOSCHandler) + oscHandlers.add(vMCHandler) + oSCRouter = OSCRouter(configManager.vrConfig.oscRouter, oscHandlers) + bvhRecorder = BVHRecorder(this) + registerTracker(hmdTracker) + for (tracker in computedTrackers) { + registerTracker(tracker) + } + } + + fun hasBridge(bridgeClass: Class): Boolean { + for (bridge in bridges) { + if (bridgeClass.isAssignableFrom(bridge.javaClass)) { + return true + } + } + return false + } + + @ThreadSafe + fun getVRBridge(bridgeClass: Class): E? { + for (bridge in bridges) { + if (bridgeClass.isAssignableFrom(bridge.javaClass)) { + return bridgeClass.cast(bridge) + } + } + return null + } + + fun addOnTick(runnable: Runnable) { + onTick.add(runnable) + } + + @ThreadSafe + fun addNewTrackerConsumer(consumer: Consumer) { + queueTask { + newTrackersConsumers.add(consumer) + for (tracker in trackers) { + consumer.accept(tracker) + } + } + } + + @ThreadSafe + fun trackerUpdated(tracker: Tracker?) { + queueTask { + humanPoseManager.trackerUpdated(tracker) + configManager.vrConfig.writeTrackerConfig(tracker) + configManager.saveConfig() + } + } + + @ThreadSafe + fun addSkeletonUpdatedCallback(consumer: Consumer?) { + queueTask { humanPoseManager.addSkeletonUpdatedCallback(consumer) } + } + + @VRServerThread + override fun run() { + trackersServer.start() + while (true) { + // final long start = System.currentTimeMillis(); + fpsTimer.update() + do { + val task = tasks.poll() ?: break + task.run() + } while (true) + for (task in onTick) { + task.run() + } + for (bridge in bridges) { + bridge.dataRead() + } + for (tracker in trackers) { + tracker.tick() + } + humanPoseManager.update() + for (bridge in bridges) { + bridge.dataWrite() + } + vrcOSCHandler.update() + vMCHandler.update() + // final long time = System.currentTimeMillis() - start; + try { + sleep(1) // 1000Hz + } catch (error: InterruptedException) { + LogManager.info("VRServer thread interrupted") + break + } + } + } + + @ThreadSafe + fun queueTask(r: Runnable) { + tasks.add(r) + } + + @VRServerThread + private fun trackerAdded(tracker: Tracker) { + humanPoseManager.trackerAdded(tracker) + } + + @ThreadSecure + fun registerTracker(tracker: Tracker) { + configManager.vrConfig.readTrackerConfig(tracker) + queueTask { + trackers.add(tracker) + trackerAdded(tracker) + for (tc in newTrackersConsumers) { + tc.accept(tracker) + } + } + } + + @ThreadSafe + fun updateSkeletonModel() { + queueTask { humanPoseManager.updateSkeletonModelFromServer() } + } + + fun resetTrackersFull(resetSourceName: String?) { + queueTask { humanPoseManager.resetTrackersFull(resetSourceName) } + } + + fun resetTrackersYaw(resetSourceName: String?) { + queueTask { humanPoseManager.resetTrackersYaw(resetSourceName) } + } + + fun resetTrackersMounting(resetSourceName: String?) { + queueTask { humanPoseManager.resetTrackersMounting(resetSourceName) } + } + + fun scheduleResetTrackersFull(resetSourceName: String?, delay: Long) { + val resetTask: TimerTask = object : TimerTask() { + override fun run() { + queueTask { humanPoseManager.resetTrackersFull(resetSourceName) } + } + } + timer.schedule(resetTask, delay) + } + + fun scheduleResetTrackersYaw(resetSourceName: String?, delay: Long) { + val yawResetTask: TimerTask = object : TimerTask() { + override fun run() { + queueTask { humanPoseManager.resetTrackersYaw(resetSourceName) } + } + } + timer.schedule(yawResetTask, delay) + } + + fun scheduleResetTrackersMounting(resetSourceName: String?, delay: Long) { + val resetMountingTask: TimerTask = object : TimerTask() { + override fun run() { + queueTask { humanPoseManager.resetTrackersMounting(resetSourceName) } + } + } + timer.schedule(resetMountingTask, delay) + } + + fun setLegTweaksEnabled(value: Boolean) { + queueTask { humanPoseManager.setLegTweaksEnabled(value) } + } + + fun setSkatingReductionEnabled(value: Boolean) { + queueTask { humanPoseManager.setSkatingCorrectionEnabled(value) } + } + + fun setFloorClipEnabled(value: Boolean) { + queueTask { humanPoseManager.setFloorClipEnabled(value) } + } + + val trackersCount: Int + get() = trackers.size + val allTrackers: List + get() = FastList(trackers) + + fun getTrackerById(id: TrackerIdT): Tracker? { + for (tracker in trackers) { + if (tracker.trackerNum != id.trackerNum) { + continue + } + + // Handle synthetic devices + if (id.deviceId == null && tracker.device == null) { + return tracker + } + if (tracker.device != null && id.deviceId != null && id.deviceId.id == tracker.device.id) { + // This is a physical tracker, and both device id and the + // tracker num match + return tracker + } + } + return null + } + + fun clearTrackersDriftCompensation() { + for (t in allTrackers) { + if (t.isImu()) { + t.resetsHandler.clearDriftCompensation() + } + } + } + + companion object { + private val nextLocalTrackerId = AtomicInteger() + @JvmStatic + fun getNextLocalTrackerId(): Int { + return nextLocalTrackerId.incrementAndGet() + } + + @JvmStatic + val currentLocalTrackerId: Int + get() = nextLocalTrackerId.get() + } +} diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBone.kt b/server/core/src/main/java/dev/slimevr/autobone/AutoBone.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/AutoBone.kt rename to server/core/src/main/java/dev/slimevr/autobone/AutoBone.kt diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt b/server/core/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt rename to server/core/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneListener.kt b/server/core/src/main/java/dev/slimevr/autobone/AutoBoneListener.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/AutoBoneListener.kt rename to server/core/src/main/java/dev/slimevr/autobone/AutoBoneListener.kt diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneProcessType.kt b/server/core/src/main/java/dev/slimevr/autobone/AutoBoneProcessType.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/AutoBoneProcessType.kt rename to server/core/src/main/java/dev/slimevr/autobone/AutoBoneProcessType.kt diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.kt b/server/core/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.kt rename to server/core/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.kt diff --git a/server/src/main/java/dev/slimevr/autobone/StatsCalculator.kt b/server/core/src/main/java/dev/slimevr/autobone/StatsCalculator.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/StatsCalculator.kt rename to server/core/src/main/java/dev/slimevr/autobone/StatsCalculator.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/AutoBoneException.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/AutoBoneException.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/AutoBoneException.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/AutoBoneException.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/HeightError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/HeightError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/HeightError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/HeightError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/IAutoBoneError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/IAutoBoneError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/IAutoBoneError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/IAutoBoneError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/PositionError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/PositionError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/PositionError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/PositionError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/SlideError.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/SlideError.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/SlideError.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/SlideError.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.kt diff --git a/server/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.kt b/server/core/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.kt similarity index 100% rename from server/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.kt rename to server/core/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.kt diff --git a/server/src/main/java/dev/slimevr/bridge/Bridge.java b/server/core/src/main/java/dev/slimevr/bridge/Bridge.java similarity index 100% rename from server/src/main/java/dev/slimevr/bridge/Bridge.java rename to server/core/src/main/java/dev/slimevr/bridge/Bridge.java diff --git a/server/src/main/java/dev/slimevr/bridge/BridgeThread.java b/server/core/src/main/java/dev/slimevr/bridge/BridgeThread.java similarity index 100% rename from server/src/main/java/dev/slimevr/bridge/BridgeThread.java rename to server/core/src/main/java/dev/slimevr/bridge/BridgeThread.java diff --git a/server/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java b/server/core/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java similarity index 100% rename from server/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java rename to server/core/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java diff --git a/server/src/main/java/dev/slimevr/bridge/PipeState.java b/server/core/src/main/java/dev/slimevr/bridge/PipeState.java similarity index 100% rename from server/src/main/java/dev/slimevr/bridge/PipeState.java rename to server/core/src/main/java/dev/slimevr/bridge/PipeState.java diff --git a/server/src/main/java/dev/slimevr/bridge/ProtobufBridge.java b/server/core/src/main/java/dev/slimevr/bridge/ProtobufBridge.java similarity index 100% rename from server/src/main/java/dev/slimevr/bridge/ProtobufBridge.java rename to server/core/src/main/java/dev/slimevr/bridge/ProtobufBridge.java diff --git a/server/src/main/java/dev/slimevr/bridge/ProtobufMessages.java b/server/core/src/main/java/dev/slimevr/bridge/ProtobufMessages.java similarity index 100% rename from server/src/main/java/dev/slimevr/bridge/ProtobufMessages.java rename to server/core/src/main/java/dev/slimevr/bridge/ProtobufMessages.java diff --git a/server/src/main/java/dev/slimevr/config/AutoBoneConfig.kt b/server/core/src/main/java/dev/slimevr/config/AutoBoneConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/AutoBoneConfig.kt rename to server/core/src/main/java/dev/slimevr/config/AutoBoneConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/BridgeConfig.java b/server/core/src/main/java/dev/slimevr/config/BridgeConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/BridgeConfig.java rename to server/core/src/main/java/dev/slimevr/config/BridgeConfig.java diff --git a/server/src/main/java/dev/slimevr/config/ConfigManager.java b/server/core/src/main/java/dev/slimevr/config/ConfigManager.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/ConfigManager.java rename to server/core/src/main/java/dev/slimevr/config/ConfigManager.java diff --git a/server/src/main/java/dev/slimevr/config/CurrentVRConfigConverter.java b/server/core/src/main/java/dev/slimevr/config/CurrentVRConfigConverter.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/CurrentVRConfigConverter.java rename to server/core/src/main/java/dev/slimevr/config/CurrentVRConfigConverter.java diff --git a/server/src/main/java/dev/slimevr/config/DriftCompensationConfig.kt b/server/core/src/main/java/dev/slimevr/config/DriftCompensationConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/DriftCompensationConfig.kt rename to server/core/src/main/java/dev/slimevr/config/DriftCompensationConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/FiltersConfig.kt b/server/core/src/main/java/dev/slimevr/config/FiltersConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/FiltersConfig.kt rename to server/core/src/main/java/dev/slimevr/config/FiltersConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/KeybindingsConfig.java b/server/core/src/main/java/dev/slimevr/config/KeybindingsConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/KeybindingsConfig.java rename to server/core/src/main/java/dev/slimevr/config/KeybindingsConfig.java diff --git a/server/src/main/java/dev/slimevr/config/LegTweaksConfig.kt b/server/core/src/main/java/dev/slimevr/config/LegTweaksConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/LegTweaksConfig.kt rename to server/core/src/main/java/dev/slimevr/config/LegTweaksConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/OSCConfig.kt b/server/core/src/main/java/dev/slimevr/config/OSCConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/OSCConfig.kt rename to server/core/src/main/java/dev/slimevr/config/OSCConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/OverlayConfig.java b/server/core/src/main/java/dev/slimevr/config/OverlayConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/OverlayConfig.java rename to server/core/src/main/java/dev/slimevr/config/OverlayConfig.java diff --git a/server/src/main/java/dev/slimevr/config/ServerConfig.java b/server/core/src/main/java/dev/slimevr/config/ServerConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/ServerConfig.java rename to server/core/src/main/java/dev/slimevr/config/ServerConfig.java diff --git a/server/src/main/java/dev/slimevr/config/SkeletonConfig.java b/server/core/src/main/java/dev/slimevr/config/SkeletonConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/SkeletonConfig.java rename to server/core/src/main/java/dev/slimevr/config/SkeletonConfig.java diff --git a/server/src/main/java/dev/slimevr/config/TapDetectionConfig.kt b/server/core/src/main/java/dev/slimevr/config/TapDetectionConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/TapDetectionConfig.kt rename to server/core/src/main/java/dev/slimevr/config/TapDetectionConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/TrackerConfig.java b/server/core/src/main/java/dev/slimevr/config/TrackerConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/TrackerConfig.java rename to server/core/src/main/java/dev/slimevr/config/TrackerConfig.java diff --git a/server/src/main/java/dev/slimevr/config/VMCConfig.kt b/server/core/src/main/java/dev/slimevr/config/VMCConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/VMCConfig.kt rename to server/core/src/main/java/dev/slimevr/config/VMCConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/VRCOSCConfig.kt b/server/core/src/main/java/dev/slimevr/config/VRCOSCConfig.kt similarity index 100% rename from server/src/main/java/dev/slimevr/config/VRCOSCConfig.kt rename to server/core/src/main/java/dev/slimevr/config/VRCOSCConfig.kt diff --git a/server/src/main/java/dev/slimevr/config/VRConfig.java b/server/core/src/main/java/dev/slimevr/config/VRConfig.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/VRConfig.java rename to server/core/src/main/java/dev/slimevr/config/VRConfig.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/BooleanMapDeserializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/BooleanMapDeserializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/BooleanMapDeserializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/BooleanMapDeserializer.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/BridgeConfigMapDeserializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/BridgeConfigMapDeserializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/BridgeConfigMapDeserializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/BridgeConfigMapDeserializer.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/FloatMapDeserializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/FloatMapDeserializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/FloatMapDeserializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/FloatMapDeserializer.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/MapDeserializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/MapDeserializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/MapDeserializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/MapDeserializer.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/QuaternionDeserializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/QuaternionDeserializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/QuaternionDeserializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/QuaternionDeserializer.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/QuaternionSerializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/QuaternionSerializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/QuaternionSerializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/QuaternionSerializer.java diff --git a/server/src/main/java/dev/slimevr/config/serializers/TrackerConfigMapDeserializer.java b/server/core/src/main/java/dev/slimevr/config/serializers/TrackerConfigMapDeserializer.java similarity index 100% rename from server/src/main/java/dev/slimevr/config/serializers/TrackerConfigMapDeserializer.java rename to server/core/src/main/java/dev/slimevr/config/serializers/TrackerConfigMapDeserializer.java diff --git a/server/src/main/java/dev/slimevr/filtering/CircularArrayList.java b/server/core/src/main/java/dev/slimevr/filtering/CircularArrayList.java similarity index 100% rename from server/src/main/java/dev/slimevr/filtering/CircularArrayList.java rename to server/core/src/main/java/dev/slimevr/filtering/CircularArrayList.java diff --git a/server/src/main/java/dev/slimevr/filtering/QuaternionMovingAverage.kt b/server/core/src/main/java/dev/slimevr/filtering/QuaternionMovingAverage.kt similarity index 100% rename from server/src/main/java/dev/slimevr/filtering/QuaternionMovingAverage.kt rename to server/core/src/main/java/dev/slimevr/filtering/QuaternionMovingAverage.kt diff --git a/server/src/main/java/dev/slimevr/filtering/TrackerFilters.kt b/server/core/src/main/java/dev/slimevr/filtering/TrackerFilters.kt similarity index 100% rename from server/src/main/java/dev/slimevr/filtering/TrackerFilters.kt rename to server/core/src/main/java/dev/slimevr/filtering/TrackerFilters.kt diff --git a/server/src/main/java/dev/slimevr/hardware/magentometer/Magneto.java b/server/core/src/main/java/dev/slimevr/hardware/magentometer/Magneto.java similarity index 100% rename from server/src/main/java/dev/slimevr/hardware/magentometer/Magneto.java rename to server/core/src/main/java/dev/slimevr/hardware/magentometer/Magneto.java diff --git a/server/src/main/java/dev/slimevr/osc/OSCHandler.java b/server/core/src/main/java/dev/slimevr/osc/OSCHandler.java similarity index 100% rename from server/src/main/java/dev/slimevr/osc/OSCHandler.java rename to server/core/src/main/java/dev/slimevr/osc/OSCHandler.java diff --git a/server/src/main/java/dev/slimevr/osc/OSCRouter.java b/server/core/src/main/java/dev/slimevr/osc/OSCRouter.java similarity index 100% rename from server/src/main/java/dev/slimevr/osc/OSCRouter.java rename to server/core/src/main/java/dev/slimevr/osc/OSCRouter.java diff --git a/server/src/main/java/dev/slimevr/osc/OSCStatic.java b/server/core/src/main/java/dev/slimevr/osc/OSCStatic.java similarity index 100% rename from server/src/main/java/dev/slimevr/osc/OSCStatic.java rename to server/core/src/main/java/dev/slimevr/osc/OSCStatic.java diff --git a/server/src/main/java/dev/slimevr/osc/UnityArmature.kt b/server/core/src/main/java/dev/slimevr/osc/UnityArmature.kt similarity index 100% rename from server/src/main/java/dev/slimevr/osc/UnityArmature.kt rename to server/core/src/main/java/dev/slimevr/osc/UnityArmature.kt diff --git a/server/src/main/java/dev/slimevr/osc/UnityBone.kt b/server/core/src/main/java/dev/slimevr/osc/UnityBone.kt similarity index 100% rename from server/src/main/java/dev/slimevr/osc/UnityBone.kt rename to server/core/src/main/java/dev/slimevr/osc/UnityBone.kt diff --git a/server/src/main/java/dev/slimevr/osc/VMCHandler.java b/server/core/src/main/java/dev/slimevr/osc/VMCHandler.java similarity index 99% rename from server/src/main/java/dev/slimevr/osc/VMCHandler.java rename to server/core/src/main/java/dev/slimevr/osc/VMCHandler.java index d06b289a1..a3479fcbd 100644 --- a/server/src/main/java/dev/slimevr/osc/VMCHandler.java +++ b/server/core/src/main/java/dev/slimevr/osc/VMCHandler.java @@ -270,8 +270,8 @@ public class VMCHandler implements OSCHandler { ) { // Create device if it doesn't exist if (trackerDevice == null) { - trackerDevice = server.getDeviceManager().createDevice("VMC receiver", "1.0", "VMC"); - server.getDeviceManager().addDevice(trackerDevice); + trackerDevice = server.deviceManager.createDevice("VMC receiver", "1.0", "VMC"); + server.deviceManager.addDevice(trackerDevice); } // Try to get tracker diff --git a/server/src/main/java/dev/slimevr/osc/VRCOSCHandler.java b/server/core/src/main/java/dev/slimevr/osc/VRCOSCHandler.java similarity index 100% rename from server/src/main/java/dev/slimevr/osc/VRCOSCHandler.java rename to server/core/src/main/java/dev/slimevr/osc/VRCOSCHandler.java diff --git a/server/src/main/java/dev/slimevr/osc/VRMReader.kt b/server/core/src/main/java/dev/slimevr/osc/VRMReader.kt similarity index 100% rename from server/src/main/java/dev/slimevr/osc/VRMReader.kt rename to server/core/src/main/java/dev/slimevr/osc/VRMReader.kt diff --git a/server/src/main/java/dev/slimevr/platform/SteamVRBridge.java b/server/core/src/main/java/dev/slimevr/platform/SteamVRBridge.java similarity index 99% rename from server/src/main/java/dev/slimevr/platform/SteamVRBridge.java rename to server/core/src/main/java/dev/slimevr/platform/SteamVRBridge.java index 824417f57..0665ddd8d 100644 --- a/server/src/main/java/dev/slimevr/platform/SteamVRBridge.java +++ b/server/core/src/main/java/dev/slimevr/platform/SteamVRBridge.java @@ -39,7 +39,7 @@ public abstract class SteamVRBridge extends ProtobufBridge implements Runnable { this.bridgeSettingsKey = bridgeSettingsKey; this.runnerThread = new Thread(this, threadName); this.shareableTrackers = shareableTrackers; - this.config = server.getConfigManager().getVrConfig().getBridge(bridgeSettingsKey); + this.config = server.configManager.getVrConfig().getBridge(bridgeSettingsKey); } @Override diff --git a/server/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java b/server/core/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java similarity index 100% rename from server/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java rename to server/core/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java diff --git a/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java b/server/core/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java similarity index 100% rename from server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java rename to server/core/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java diff --git a/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java b/server/core/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java similarity index 100% rename from server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java rename to server/core/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java diff --git a/server/src/main/java/dev/slimevr/platform/windows/WindowsPipe.java b/server/core/src/main/java/dev/slimevr/platform/windows/WindowsPipe.java similarity index 100% rename from server/src/main/java/dev/slimevr/platform/windows/WindowsPipe.java rename to server/core/src/main/java/dev/slimevr/platform/windows/WindowsPipe.java diff --git a/server/src/main/java/dev/slimevr/poseframeformat/PoseFrameIO.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/PoseFrameIO.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/PoseFrameIO.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/PoseFrameIO.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/PoseFrames.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/PoseFrames.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/PoseFrames.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/PoseFrames.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/PoseRecorder.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/PoseRecorder.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/PoseRecorder.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/PoseRecorder.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/player/PlayerTracker.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/player/PlayerTracker.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/player/PlayerTracker.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/player/PlayerTracker.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/player/TrackerFramesPlayer.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/player/TrackerFramesPlayer.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/player/TrackerFramesPlayer.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/player/TrackerFramesPlayer.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrame.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrame.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrame.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrame.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrameData.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrameData.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrameData.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrameData.kt diff --git a/server/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrames.kt b/server/core/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrames.kt similarity index 100% rename from server/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrames.kt rename to server/core/src/main/java/dev/slimevr/poseframeformat/trackerdata/TrackerFrames.kt diff --git a/server/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java b/server/core/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java rename to server/core/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/BVHRecorder.java b/server/core/src/main/java/dev/slimevr/posestreamer/BVHRecorder.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/BVHRecorder.java rename to server/core/src/main/java/dev/slimevr/posestreamer/BVHRecorder.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/BVHSettings.java b/server/core/src/main/java/dev/slimevr/posestreamer/BVHSettings.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/BVHSettings.java rename to server/core/src/main/java/dev/slimevr/posestreamer/BVHSettings.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java b/server/core/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java rename to server/core/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.kt b/server/core/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.kt similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.kt rename to server/core/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.kt diff --git a/server/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java b/server/core/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java rename to server/core/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java b/server/core/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java rename to server/core/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java b/server/core/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java rename to server/core/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java b/server/core/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java rename to server/core/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java diff --git a/server/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java b/server/core/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java similarity index 100% rename from server/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java rename to server/core/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java diff --git a/server/src/main/java/dev/slimevr/protocol/ConnectionContext.java b/server/core/src/main/java/dev/slimevr/protocol/ConnectionContext.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/ConnectionContext.java rename to server/core/src/main/java/dev/slimevr/protocol/ConnectionContext.java diff --git a/server/src/main/java/dev/slimevr/protocol/GenericConnection.java b/server/core/src/main/java/dev/slimevr/protocol/GenericConnection.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/GenericConnection.java rename to server/core/src/main/java/dev/slimevr/protocol/GenericConnection.java diff --git a/server/src/main/java/dev/slimevr/protocol/ProtocolAPI.java b/server/core/src/main/java/dev/slimevr/protocol/ProtocolAPI.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/ProtocolAPI.java rename to server/core/src/main/java/dev/slimevr/protocol/ProtocolAPI.java diff --git a/server/src/main/java/dev/slimevr/protocol/ProtocolAPIServer.java b/server/core/src/main/java/dev/slimevr/protocol/ProtocolAPIServer.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/ProtocolAPIServer.java rename to server/core/src/main/java/dev/slimevr/protocol/ProtocolAPIServer.java diff --git a/server/src/main/java/dev/slimevr/protocol/ProtocolHandler.java b/server/core/src/main/java/dev/slimevr/protocol/ProtocolHandler.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/ProtocolHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/ProtocolHandler.java diff --git a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java b/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java rename to server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java diff --git a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java b/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java similarity index 99% rename from server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java index ff7b165c6..7eddca9fa 100644 --- a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java +++ b/server/core/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java @@ -74,8 +74,7 @@ public class DataFeedHandler extends ProtocolHandler { .createDevicesData( fbb, config.getDataMask(), - this.api.server - .getDeviceManager() + this.api.server.deviceManager .getDevices() ); int trackersOffset = DataFeedBuilder diff --git a/server/src/main/java/dev/slimevr/protocol/pubsub/HashedTopicId.java b/server/core/src/main/java/dev/slimevr/protocol/pubsub/HashedTopicId.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/pubsub/HashedTopicId.java rename to server/core/src/main/java/dev/slimevr/protocol/pubsub/HashedTopicId.java diff --git a/server/src/main/java/dev/slimevr/protocol/pubsub/PubSubHandler.java b/server/core/src/main/java/dev/slimevr/protocol/pubsub/PubSubHandler.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/pubsub/PubSubHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/pubsub/PubSubHandler.java diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java similarity index 94% rename from server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java index 3d9597e76..3c1d4a2b8 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java +++ b/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java @@ -89,7 +89,7 @@ public class RPCHandler extends ProtocolHandler registerPacketListener(RpcMessage.SetPauseTrackingRequest, this::onSetPauseTrackingRequest); - this.api.server.getAutoBoneHandler().addListener(this); + this.api.server.autoBoneHandler.addListener(this); } private void onServerInfosRequest( @@ -111,7 +111,7 @@ public class RPCHandler extends ProtocolHandler RpcMessageHeader messageHeader ) { FlatBufferBuilder fbb = new FlatBufferBuilder(32); - OverlayConfig config = this.api.server.getConfigManager().getVrConfig().getOverlay(); + OverlayConfig config = this.api.server.configManager.getVrConfig().getOverlay(); int response = OverlayDisplayModeResponse .createOverlayDisplayModeResponse(fbb, config.isVisible(), config.isMirrored()); int outbound = this.createRPCMessage(fbb, RpcMessage.OverlayDisplayModeResponse, response); @@ -127,11 +127,11 @@ public class RPCHandler extends ProtocolHandler .message(new OverlayDisplayModeChangeRequest()); if (req == null) return; - OverlayConfig config = this.api.server.getConfigManager().getVrConfig().getOverlay(); + OverlayConfig config = this.api.server.configManager.getVrConfig().getOverlay(); config.setMirrored(req.isMirrored()); config.setVisible(req.isVisible()); - this.api.server.getConfigManager().saveConfig(); + this.api.server.configManager.saveConfig(); } public void onSkeletonResetAllRequest(GenericConnection conn, RpcMessageHeader messageHeader) { @@ -142,7 +142,7 @@ public class RPCHandler extends ProtocolHandler this.api.server.humanPoseManager.resetOffsets(); this.api.server.humanPoseManager.saveConfig(); - this.api.server.getConfigManager().saveConfig(); + this.api.server.configManager.saveConfig(); // might not be a good idea maybe let the client ask again FlatBufferBuilder fbb = new FlatBufferBuilder(300); @@ -178,7 +178,7 @@ public class RPCHandler extends ProtocolHandler this.api.server.humanPoseManager.setOffset(joint, req.value()); this.api.server.humanPoseManager.saveConfig(); - this.api.server.getConfigManager().saveConfig(); + this.api.server.configManager.saveConfig(); } public void onRecordBVHRequest(GenericConnection conn, RpcMessageHeader messageHeader) { @@ -187,16 +187,16 @@ public class RPCHandler extends ProtocolHandler return; if (req.stop()) { - if (this.api.server.getBvhRecorder().isRecording()) - this.api.server.getBvhRecorder().endRecording(); + if (this.api.server.bvhRecorder.isRecording()) + this.api.server.bvhRecorder.endRecording(); } else { - if (!this.api.server.getBvhRecorder().isRecording()) - this.api.server.getBvhRecorder().startRecording(); + if (!this.api.server.bvhRecorder.isRecording()) + this.api.server.bvhRecorder.startRecording(); } FlatBufferBuilder fbb = new FlatBufferBuilder(40); int status = RecordBVHStatus - .createRecordBVHStatus(fbb, this.api.server.getBvhRecorder().isRecording()); + .createRecordBVHStatus(fbb, this.api.server.bvhRecorder.isRecording()); int outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status); fbb.finish(outbound); conn.send(fbb.dataBuffer()); @@ -351,8 +351,7 @@ public class RPCHandler extends ProtocolHandler return; conn.getContext().setUseAutoBone(true); - this.api.server - .getAutoBoneHandler() + this.api.server.autoBoneHandler .startProcessByType(AutoBoneProcessType.Companion.getById(req.processType())); } @@ -467,7 +466,7 @@ public class RPCHandler extends ProtocolHandler if (req == null) return; - var statuses = this.api.server.getStatusSystem().getStatuses(); + var statuses = this.api.server.statusSystem.getStatuses(); FlatBufferBuilder fbb = new FlatBufferBuilder( statuses.length * RPCStatusHandler.STATUS_EXPECTED_SIZE diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/reset/RPCResetHandler.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/reset/RPCResetHandler.java similarity index 96% rename from server/src/main/java/dev/slimevr/protocol/rpc/reset/RPCResetHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/reset/RPCResetHandler.java index 4d624d69d..4abfab250 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/reset/RPCResetHandler.java +++ b/server/core/src/main/java/dev/slimevr/protocol/rpc/reset/RPCResetHandler.java @@ -22,7 +22,7 @@ public class RPCResetHandler implements ResetListener { this.rpcHandler = rpcHandler; this.api = api; - this.api.server.getResetHandler().addListener(this); + this.api.server.resetHandler.addListener(this); } @Override diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/serial/RPCProvisioningHandler.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/serial/RPCProvisioningHandler.java similarity index 92% rename from server/src/main/java/dev/slimevr/protocol/rpc/serial/RPCProvisioningHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/serial/RPCProvisioningHandler.java index 6132cabcb..fa58bbc51 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/serial/RPCProvisioningHandler.java +++ b/server/core/src/main/java/dev/slimevr/protocol/rpc/serial/RPCProvisioningHandler.java @@ -31,7 +31,7 @@ public class RPCProvisioningHandler implements ProvisioningListener { this::onStopWifiProvisioningRequest ); - this.api.server.getProvisioningHandler().addListener(this); + this.api.server.provisioningHandler.addListener(this); } public void onStartWifiProvisioningRequest( @@ -42,7 +42,7 @@ public class RPCProvisioningHandler implements ProvisioningListener { .message(new StartWifiProvisioningRequest()); if (req == null) return; - this.api.server.getProvisioningHandler().start(req.ssid(), req.password(), req.port()); + this.api.server.provisioningHandler.start(req.ssid(), req.password(), req.port()); conn.getContext().setUseProvisioning(true); } @@ -55,7 +55,7 @@ public class RPCProvisioningHandler implements ProvisioningListener { if (req == null) return; conn.getContext().setUseProvisioning(false); - this.api.server.getProvisioningHandler().stop(); + this.api.server.provisioningHandler.stop(); } @Override diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/serial/RPCSerialHandler.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/serial/RPCSerialHandler.java similarity index 91% rename from server/src/main/java/dev/slimevr/protocol/rpc/serial/RPCSerialHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/serial/RPCSerialHandler.java index a93fb2c0d..7424c8a11 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/serial/RPCSerialHandler.java +++ b/server/core/src/main/java/dev/slimevr/protocol/rpc/serial/RPCSerialHandler.java @@ -44,7 +44,7 @@ public class RPCSerialHandler implements SerialListener { .registerPacketListener(RpcMessage.CloseSerialRequest, this::onCloseSerialRequest); rpcHandler .registerPacketListener(RpcMessage.SerialDevicesRequest, this::onRequestSerialDevices); - this.api.server.getSerialHandler().addListener(this); + this.api.server.serialHandler.addListener(this); } @Override @@ -131,7 +131,7 @@ public class RPCSerialHandler implements SerialListener { if (req == null) return; - this.api.server.getSerialHandler().rebootRequest(); + this.api.server.serialHandler.rebootRequest(); } public void onSerialTrackerGetInfoRequest( @@ -143,7 +143,7 @@ public class RPCSerialHandler implements SerialListener { if (req == null) return; - this.api.server.getSerialHandler().infoRequest(); + this.api.server.serialHandler.infoRequest(); } public void onSerialTrackerFactoryResetRequest( @@ -155,7 +155,7 @@ public class RPCSerialHandler implements SerialListener { if (req == null) return; - this.api.server.getSerialHandler().factoryResetRequest(); + this.api.server.serialHandler.factoryResetRequest(); } @@ -171,7 +171,7 @@ public class RPCSerialHandler implements SerialListener { List devicesOffsets = new ArrayList<>(); try { - this.api.server.getSerialHandler().getKnownPorts().forEach((port) -> { + this.api.server.serialHandler.getKnownPorts().forEach((port) -> { int portOffset = fbb.createString(port.getPortLocation()); int nameOffset = fbb.createString(port.getDescriptivePortName()); devicesOffsets.add(SerialDevice.createSerialDevice(fbb, portOffset, nameOffset)); @@ -198,10 +198,10 @@ public class RPCSerialHandler implements SerialListener { if ( req.password() == null || req.ssid() == null - || !this.api.server.getSerialHandler().isConnected() + || !this.api.server.serialHandler.isConnected() ) return; - this.api.server.getSerialHandler().setWifi(req.ssid(), req.password()); + this.api.server.serialHandler.setWifi(req.ssid(), req.password()); } public void onOpenSerialRequest(GenericConnection conn, RpcMessageHeader messageHeader) { @@ -212,7 +212,7 @@ public class RPCSerialHandler implements SerialListener { conn.getContext().setUseSerial(true); try { - this.api.server.getSerialHandler().openSerial(req.port(), req.auto()); + this.api.server.serialHandler.openSerial(req.port(), req.auto()); } catch (Exception e) { LogManager.severe("Unable to open serial port", e); } catch (Throwable e) { @@ -221,7 +221,7 @@ public class RPCSerialHandler implements SerialListener { FlatBufferBuilder fbb = new FlatBufferBuilder(32); SerialUpdateResponse.startSerialUpdateResponse(fbb); - SerialUpdateResponse.addClosed(fbb, !this.api.server.getSerialHandler().isConnected()); + SerialUpdateResponse.addClosed(fbb, !this.api.server.serialHandler.isConnected()); int update = SerialUpdateResponse.endSerialUpdateResponse(fbb); int outbound = rpcHandler.createRPCMessage(fbb, RpcMessage.SerialUpdateResponse, update); fbb.finish(outbound); @@ -236,11 +236,11 @@ public class RPCSerialHandler implements SerialListener { conn.getContext().setUseSerial(false); - this.api.server.getSerialHandler().closeSerial(); + this.api.server.serialHandler.closeSerial(); FlatBufferBuilder fbb = new FlatBufferBuilder(32); SerialUpdateResponse.startSerialUpdateResponse(fbb); - SerialUpdateResponse.addClosed(fbb, !this.api.server.getSerialHandler().isConnected()); + SerialUpdateResponse.addClosed(fbb, !this.api.server.serialHandler.isConnected()); int update = SerialUpdateResponse.endSerialUpdateResponse(fbb); int outbound = rpcHandler.createRPCMessage(fbb, RpcMessage.SerialUpdateResponse, update); fbb.finish(outbound); diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java b/server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java similarity index 91% rename from server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java rename to server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java index 3befe0680..806d3b14a 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java +++ b/server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java @@ -48,38 +48,38 @@ public class RPCSettingsHandler { RPCSettingsBuilder .createFilterSettings( fbb, - this.api.server.getConfigManager().getVrConfig().getFilters() + this.api.server.configManager.getVrConfig().getFilters() ), RPCSettingsBuilder .createDriftCompensationSettings( fbb, - this.api.server.getConfigManager().getVrConfig().getDriftCompensation() + this.api.server.configManager.getVrConfig().getDriftCompensation() ), RPCSettingsBuilder .createOSCRouterSettings( fbb, - this.api.server.getConfigManager().getVrConfig().getOscRouter() + this.api.server.configManager.getVrConfig().getOscRouter() ), RPCSettingsBuilder .createVRCOSCSettings( fbb, - this.api.server.getConfigManager().getVrConfig().getVrcOSC() + this.api.server.configManager.getVrConfig().getVrcOSC() ), RPCSettingsBuilder .createVMCOSCSettings( fbb, - this.api.server.getConfigManager().getVrConfig().getVMC() + this.api.server.configManager.getVrConfig().getVMC() ), RPCSettingsBuilder .createModelSettings( fbb, this.api.server.humanPoseManager, - this.api.server.getConfigManager().getVrConfig().getLegTweaks() + this.api.server.configManager.getVrConfig().getLegTweaks() ), RPCSettingsBuilder .createTapDetectionSettings( fbb, - this.api.server.getConfigManager().getVrConfig().getTapDetection() + this.api.server.configManager.getVrConfig().getTapDetection() ) ); int outbound = rpcHandler.createRPCMessage(fbb, RpcMessage.SettingsResponse, settings); @@ -114,8 +114,7 @@ public class RPCSettingsHandler { if (req.filtering() != null) { TrackerFilters type = TrackerFilters.fromId(req.filtering().type()); if (type != null) { - FiltersConfig filtersConfig = this.api.server - .getConfigManager() + FiltersConfig filtersConfig = this.api.server.configManager .getVrConfig() .getFilters(); filtersConfig.setType(type.getConfigKey()); @@ -125,8 +124,7 @@ public class RPCSettingsHandler { } if (req.driftCompensation() != null) { - DriftCompensationConfig driftCompensationConfig = this.api.server - .getConfigManager() + DriftCompensationConfig driftCompensationConfig = this.api.server.configManager .getVrConfig() .getDriftCompensation(); driftCompensationConfig.setEnabled(req.driftCompensation().enabled()); @@ -136,8 +134,7 @@ public class RPCSettingsHandler { } if (req.oscRouter() != null) { - OSCConfig oscRouterConfig = this.api.server - .getConfigManager() + OSCConfig oscRouterConfig = this.api.server.configManager .getVrConfig() .getOscRouter(); if (oscRouterConfig != null) { @@ -155,12 +152,11 @@ public class RPCSettingsHandler { } if (req.vrcOsc() != null) { - VRCOSCConfig vrcOSCConfig = this.api.server - .getConfigManager() + VRCOSCConfig vrcOSCConfig = this.api.server.configManager .getVrConfig() .getVrcOSC(); if (vrcOSCConfig != null) { - VRCOSCHandler VRCOSCHandler = this.api.server.getVrcOSCHandler(); + VRCOSCHandler VRCOSCHandler = this.api.server.vrcOSCHandler; var osc = req.vrcOsc().oscSettings(); var trackers = req.vrcOsc().trackers(); @@ -189,8 +185,7 @@ public class RPCSettingsHandler { } if (req.vmcOsc() != null) { - VMCConfig vmcConfig = this.api.server - .getConfigManager() + VMCConfig vmcConfig = this.api.server.configManager .getVrConfig() .getVMC(); if (vmcConfig != null) { @@ -212,8 +207,7 @@ public class RPCSettingsHandler { } if (req.tapDetectionSettings() != null) { - TapDetectionConfig tapDetectionConfig = this.api.server - .getConfigManager() + TapDetectionConfig tapDetectionConfig = this.api.server.configManager .getVrConfig() .getTapDetection(); var tapDetectionSettings = req.tapDetectionSettings(); @@ -259,7 +253,7 @@ public class RPCSettingsHandler { var modelSettings = req.modelSettings(); if (modelSettings != null) { var hpm = this.api.server.humanPoseManager; - var legTweaksConfig = this.api.server.getConfigManager().getVrConfig().getLegTweaks(); + var legTweaksConfig = this.api.server.configManager.getVrConfig().getLegTweaks(); var toggles = modelSettings.toggles(); var ratios = modelSettings.ratios(); var legTweaks = modelSettings.legTweaks(); @@ -354,7 +348,7 @@ public class RPCSettingsHandler { } - this.api.server.getConfigManager().saveConfig(); + this.api.server.configManager.saveConfig(); } } diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCTapSetupHandler.kt b/server/core/src/main/java/dev/slimevr/protocol/rpc/setup/RPCTapSetupHandler.kt similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCTapSetupHandler.kt rename to server/core/src/main/java/dev/slimevr/protocol/rpc/setup/RPCTapSetupHandler.kt diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt b/server/core/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt rename to server/core/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/status/RPCStatusHandler.kt b/server/core/src/main/java/dev/slimevr/protocol/rpc/status/RPCStatusHandler.kt similarity index 100% rename from server/src/main/java/dev/slimevr/protocol/rpc/status/RPCStatusHandler.kt rename to server/core/src/main/java/dev/slimevr/protocol/rpc/status/RPCStatusHandler.kt diff --git a/server/src/main/java/dev/slimevr/reset/ResetHandler.java b/server/core/src/main/java/dev/slimevr/reset/ResetHandler.java similarity index 100% rename from server/src/main/java/dev/slimevr/reset/ResetHandler.java rename to server/core/src/main/java/dev/slimevr/reset/ResetHandler.java diff --git a/server/src/main/java/dev/slimevr/reset/ResetListener.java b/server/core/src/main/java/dev/slimevr/reset/ResetListener.java similarity index 100% rename from server/src/main/java/dev/slimevr/reset/ResetListener.java rename to server/core/src/main/java/dev/slimevr/reset/ResetListener.java diff --git a/server/src/main/java/dev/slimevr/serial/ProvisioningHandler.java b/server/core/src/main/java/dev/slimevr/serial/ProvisioningHandler.java similarity index 93% rename from server/src/main/java/dev/slimevr/serial/ProvisioningHandler.java rename to server/core/src/main/java/dev/slimevr/serial/ProvisioningHandler.java index b6acf45ae..b61518e3a 100644 --- a/server/src/main/java/dev/slimevr/serial/ProvisioningHandler.java +++ b/server/core/src/main/java/dev/slimevr/serial/ProvisioningHandler.java @@ -28,7 +28,7 @@ public class ProvisioningHandler implements SerialListener { public ProvisioningHandler(VRServer vrServer) { this.vrServer = vrServer; - vrServer.getSerialHandler().addListener(this); + vrServer.serialHandler.addListener(this); this.provisioningTickTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { @@ -54,7 +54,7 @@ public class ProvisioningHandler implements SerialListener { this.ssid = null; this.password = null; this.changeStatus(ProvisioningStatus.NONE); - this.vrServer.getSerialHandler().closeSerial(); + this.vrServer.serialHandler.closeSerial(); } public void initSerial(String port) { @@ -63,9 +63,9 @@ public class ProvisioningHandler implements SerialListener { try { boolean openResult = false; if (port != null) - openResult = vrServer.getSerialHandler().openSerial(port, false); + openResult = vrServer.serialHandler.openSerial(port, false); else - openResult = vrServer.getSerialHandler().openSerial(null, true); + openResult = vrServer.serialHandler.openSerial(null, true); if (!openResult) LogManager.info("[SerialHandler] Serial port wasn't open..."); } catch (Exception e) { @@ -80,7 +80,7 @@ public class ProvisioningHandler implements SerialListener { public void tryProvisioning() { this.changeStatus(ProvisioningStatus.PROVISIONING); - vrServer.getSerialHandler().setWifi(this.ssid, this.password); + vrServer.serialHandler.setWifi(this.ssid, this.password); } diff --git a/server/src/main/java/dev/slimevr/serial/ProvisioningListener.java b/server/core/src/main/java/dev/slimevr/serial/ProvisioningListener.java similarity index 100% rename from server/src/main/java/dev/slimevr/serial/ProvisioningListener.java rename to server/core/src/main/java/dev/slimevr/serial/ProvisioningListener.java diff --git a/server/src/main/java/dev/slimevr/serial/ProvisioningStatus.java b/server/core/src/main/java/dev/slimevr/serial/ProvisioningStatus.java similarity index 100% rename from server/src/main/java/dev/slimevr/serial/ProvisioningStatus.java rename to server/core/src/main/java/dev/slimevr/serial/ProvisioningStatus.java diff --git a/server/src/main/java/dev/slimevr/serial/SerialHandler.java b/server/core/src/main/java/dev/slimevr/serial/SerialHandler.java similarity index 100% rename from server/src/main/java/dev/slimevr/serial/SerialHandler.java rename to server/core/src/main/java/dev/slimevr/serial/SerialHandler.java diff --git a/server/src/main/java/dev/slimevr/serial/SerialListener.java b/server/core/src/main/java/dev/slimevr/serial/SerialListener.java similarity index 100% rename from server/src/main/java/dev/slimevr/serial/SerialListener.java rename to server/core/src/main/java/dev/slimevr/serial/SerialListener.java diff --git a/server/src/main/java/dev/slimevr/setup/TapSetupHandler.kt b/server/core/src/main/java/dev/slimevr/setup/TapSetupHandler.kt similarity index 100% rename from server/src/main/java/dev/slimevr/setup/TapSetupHandler.kt rename to server/core/src/main/java/dev/slimevr/setup/TapSetupHandler.kt diff --git a/server/src/main/java/dev/slimevr/status/StatusSystem.kt b/server/core/src/main/java/dev/slimevr/status/StatusSystem.kt similarity index 100% rename from server/src/main/java/dev/slimevr/status/StatusSystem.kt rename to server/core/src/main/java/dev/slimevr/status/StatusSystem.kt diff --git a/server/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java b/server/core/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/BoneType.java b/server/core/src/main/java/dev/slimevr/tracking/processor/BoneType.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/BoneType.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/BoneType.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java b/server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java similarity index 98% rename from server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java index 7e81ac898..c001a6b21 100644 --- a/server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java +++ b/server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java @@ -321,7 +321,7 @@ public class HumanPoseManager { // This recomputes all node offsets, so the defaults don't need to be // explicitly loaded into the skeleton (no need for // `updateNodeOffsetsInSkeleton()`) - loadFromConfig(server.getConfigManager()); + loadFromConfig(server.configManager); for (Consumer sc : onSkeletonUpdated) sc.accept(skeleton); } @@ -649,7 +649,7 @@ public class HumanPoseManager { if (isSkeletonPresent()) { skeleton.resetTrackersFull(resetSourceName); if (server != null) { - server.getVrcOSCHandler().yawAlign(); + server.vrcOSCHandler.yawAlign(); server .getVMCHandler() .alignVMCTracking(getRootNode().getWorldTransform().getRotation()); @@ -662,7 +662,7 @@ public class HumanPoseManager { if (isSkeletonPresent()) { skeleton.resetTrackersYaw(resetSourceName); if (server != null) { - server.getVrcOSCHandler().yawAlign(); + server.vrcOSCHandler.yawAlign(); server .getVMCHandler() .alignVMCTracking(getRootNode().getWorldTransform().getRotation()); @@ -754,13 +754,12 @@ public class HumanPoseManager { if (isSkeletonPresent()) { skeleton.setFloorclipEnabled(value); if (server != null) { - server - .getConfigManager() + server.configManager .getVrConfig() .getSkeleton() .getToggles() .put(SkeletonConfigToggles.FLOOR_CLIP.configKey, value); - server.getConfigManager().saveConfig(); + server.configManager.saveConfig(); } } } @@ -770,13 +769,12 @@ public class HumanPoseManager { if (isSkeletonPresent()) { skeleton.setSkatingCorrectionEnabled(value); if (server != null) { - server - .getConfigManager() + server.configManager .getVrConfig() .getSkeleton() .getToggles() .put(SkeletonConfigToggles.SKATING_CORRECTION.configKey, value); - server.getConfigManager().saveConfig(); + server.configManager.saveConfig(); } } } diff --git a/server/src/main/java/dev/slimevr/tracking/processor/TransformNode.kt b/server/core/src/main/java/dev/slimevr/tracking/processor/TransformNode.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/TransformNode.kt rename to server/core/src/main/java/dev/slimevr/tracking/processor/TransformNode.kt diff --git a/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java b/server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java b/server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java b/server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java b/server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java similarity index 99% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java index 33f2bc390..196d8de95 100644 --- a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java +++ b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java @@ -178,12 +178,12 @@ public class HumanSkeleton { tapDetectionManager = new TapDetectionManager( this, humanPoseManager, - server.getConfigManager().getVrConfig().getTapDetection(), - server.getResetHandler(), - server.getTapSetupHandler(), + server.configManager.getVrConfig().getTapDetection(), + server.resetHandler, + server.tapSetupHandler, server.getAllTrackers() ); - legTweaks.setConfig(server.getConfigManager().getVrConfig().getLegTweaks()); + legTweaks.setConfig(server.configManager.getVrConfig().getLegTweaks()); } public HumanSkeleton( diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java diff --git a/server/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java rename to server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/Device.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/Device.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/Device.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/Device.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/DeviceManager.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/DeviceManager.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/DeviceManager.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/DeviceManager.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerFilteringHandler.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerFilteringHandler.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/TrackerFilteringHandler.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerFilteringHandler.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/udp/SensorTap.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/SensorTap.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/udp/SensorTap.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/udp/SensorTap.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt similarity index 100% rename from server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt rename to server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt diff --git a/server/src/main/java/dev/slimevr/util/ann/VRServerThread.java b/server/core/src/main/java/dev/slimevr/util/ann/VRServerThread.java similarity index 100% rename from server/src/main/java/dev/slimevr/util/ann/VRServerThread.java rename to server/core/src/main/java/dev/slimevr/util/ann/VRServerThread.java diff --git a/server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java b/server/core/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java similarity index 99% rename from server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java rename to server/core/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java index 76b6d9668..3d2d98033 100644 --- a/server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java +++ b/server/core/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java @@ -46,7 +46,7 @@ public class WebSocketVRBridge extends WebsocketAPI implements Bridge { List computedTrackers, VRServer server ) { - super(server, server.getProtocolAPI()); + super(server, server.protocolAPI); this.hmd = hmd; this.computedTrackers = new FastList<>(computedTrackers); this.internalTrackers = new FastList<>(computedTrackers.size()); diff --git a/server/src/main/java/dev/slimevr/websocketapi/WebsocketAPI.java b/server/core/src/main/java/dev/slimevr/websocketapi/WebsocketAPI.java similarity index 100% rename from server/src/main/java/dev/slimevr/websocketapi/WebsocketAPI.java rename to server/core/src/main/java/dev/slimevr/websocketapi/WebsocketAPI.java diff --git a/server/src/main/java/dev/slimevr/websocketapi/WebsocketConnection.java b/server/core/src/main/java/dev/slimevr/websocketapi/WebsocketConnection.java similarity index 100% rename from server/src/main/java/dev/slimevr/websocketapi/WebsocketConnection.java rename to server/core/src/main/java/dev/slimevr/websocketapi/WebsocketConnection.java diff --git a/server/src/main/java/io/eiren/math/FloatMath.java b/server/core/src/main/java/io/eiren/math/FloatMath.java similarity index 100% rename from server/src/main/java/io/eiren/math/FloatMath.java rename to server/core/src/main/java/io/eiren/math/FloatMath.java diff --git a/server/src/main/java/io/eiren/util/BufferedTimer.java b/server/core/src/main/java/io/eiren/util/BufferedTimer.java similarity index 100% rename from server/src/main/java/io/eiren/util/BufferedTimer.java rename to server/core/src/main/java/io/eiren/util/BufferedTimer.java diff --git a/server/src/main/java/io/eiren/util/OperatingSystem.java b/server/core/src/main/java/io/eiren/util/OperatingSystem.java similarity index 100% rename from server/src/main/java/io/eiren/util/OperatingSystem.java rename to server/core/src/main/java/io/eiren/util/OperatingSystem.java diff --git a/server/src/main/java/io/eiren/util/StringUtils.java b/server/core/src/main/java/io/eiren/util/StringUtils.java similarity index 100% rename from server/src/main/java/io/eiren/util/StringUtils.java rename to server/core/src/main/java/io/eiren/util/StringUtils.java diff --git a/server/src/main/java/io/eiren/util/Util.java b/server/core/src/main/java/io/eiren/util/Util.java similarity index 100% rename from server/src/main/java/io/eiren/util/Util.java rename to server/core/src/main/java/io/eiren/util/Util.java diff --git a/server/src/main/java/io/eiren/util/ann/AWTThread.java b/server/core/src/main/java/io/eiren/util/ann/AWTThread.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/AWTThread.java rename to server/core/src/main/java/io/eiren/util/ann/AWTThread.java diff --git a/server/src/main/java/io/eiren/util/ann/DebugSwitch.java b/server/core/src/main/java/io/eiren/util/ann/DebugSwitch.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/DebugSwitch.java rename to server/core/src/main/java/io/eiren/util/ann/DebugSwitch.java diff --git a/server/src/main/java/io/eiren/util/ann/NativeUnsafe.java b/server/core/src/main/java/io/eiren/util/ann/NativeUnsafe.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/NativeUnsafe.java rename to server/core/src/main/java/io/eiren/util/ann/NativeUnsafe.java diff --git a/server/src/main/java/io/eiren/util/ann/Synchronize.java b/server/core/src/main/java/io/eiren/util/ann/Synchronize.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/Synchronize.java rename to server/core/src/main/java/io/eiren/util/ann/Synchronize.java diff --git a/server/src/main/java/io/eiren/util/ann/ThreadSafe.java b/server/core/src/main/java/io/eiren/util/ann/ThreadSafe.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/ThreadSafe.java rename to server/core/src/main/java/io/eiren/util/ann/ThreadSafe.java diff --git a/server/src/main/java/io/eiren/util/ann/ThreadSafeSingle.java b/server/core/src/main/java/io/eiren/util/ann/ThreadSafeSingle.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/ThreadSafeSingle.java rename to server/core/src/main/java/io/eiren/util/ann/ThreadSafeSingle.java diff --git a/server/src/main/java/io/eiren/util/ann/ThreadSecure.java b/server/core/src/main/java/io/eiren/util/ann/ThreadSecure.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/ThreadSecure.java rename to server/core/src/main/java/io/eiren/util/ann/ThreadSecure.java diff --git a/server/src/main/java/io/eiren/util/ann/Transient.java b/server/core/src/main/java/io/eiren/util/ann/Transient.java similarity index 100% rename from server/src/main/java/io/eiren/util/ann/Transient.java rename to server/core/src/main/java/io/eiren/util/ann/Transient.java diff --git a/server/src/main/java/io/eiren/util/collections/FastList.java b/server/core/src/main/java/io/eiren/util/collections/FastList.java similarity index 100% rename from server/src/main/java/io/eiren/util/collections/FastList.java rename to server/core/src/main/java/io/eiren/util/collections/FastList.java diff --git a/server/src/main/java/io/eiren/util/collections/RemoveAtSwapFastList.java b/server/core/src/main/java/io/eiren/util/collections/RemoveAtSwapFastList.java similarity index 100% rename from server/src/main/java/io/eiren/util/collections/RemoveAtSwapFastList.java rename to server/core/src/main/java/io/eiren/util/collections/RemoveAtSwapFastList.java diff --git a/server/src/main/java/io/eiren/util/collections/RemoveAtSwapList.java b/server/core/src/main/java/io/eiren/util/collections/RemoveAtSwapList.java similarity index 100% rename from server/src/main/java/io/eiren/util/collections/RemoveAtSwapList.java rename to server/core/src/main/java/io/eiren/util/collections/RemoveAtSwapList.java diff --git a/server/src/main/java/io/eiren/util/collections/ResettableIterator.java b/server/core/src/main/java/io/eiren/util/collections/ResettableIterator.java similarity index 100% rename from server/src/main/java/io/eiren/util/collections/ResettableIterator.java rename to server/core/src/main/java/io/eiren/util/collections/ResettableIterator.java diff --git a/server/src/main/java/io/eiren/util/collections/SkipIterator.java b/server/core/src/main/java/io/eiren/util/collections/SkipIterator.java similarity index 100% rename from server/src/main/java/io/eiren/util/collections/SkipIterator.java rename to server/core/src/main/java/io/eiren/util/collections/SkipIterator.java diff --git a/server/src/main/java/io/eiren/util/logging/DefaultGLog.java b/server/core/src/main/java/io/eiren/util/logging/DefaultGLog.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/DefaultGLog.java rename to server/core/src/main/java/io/eiren/util/logging/DefaultGLog.java diff --git a/server/src/main/java/io/eiren/util/logging/FileLogFormatter.java b/server/core/src/main/java/io/eiren/util/logging/FileLogFormatter.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/FileLogFormatter.java rename to server/core/src/main/java/io/eiren/util/logging/FileLogFormatter.java diff --git a/server/src/main/java/io/eiren/util/logging/IGLog.java b/server/core/src/main/java/io/eiren/util/logging/IGLog.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/IGLog.java rename to server/core/src/main/java/io/eiren/util/logging/IGLog.java diff --git a/server/src/main/java/io/eiren/util/logging/LogManager.java b/server/core/src/main/java/io/eiren/util/logging/LogManager.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/LogManager.java rename to server/core/src/main/java/io/eiren/util/logging/LogManager.java diff --git a/server/src/main/java/io/eiren/util/logging/LoggerOutputStream.java b/server/core/src/main/java/io/eiren/util/logging/LoggerOutputStream.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/LoggerOutputStream.java rename to server/core/src/main/java/io/eiren/util/logging/LoggerOutputStream.java diff --git a/server/src/main/java/io/eiren/util/logging/LoggerRecorder.java b/server/core/src/main/java/io/eiren/util/logging/LoggerRecorder.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/LoggerRecorder.java rename to server/core/src/main/java/io/eiren/util/logging/LoggerRecorder.java diff --git a/server/src/main/java/io/eiren/util/logging/PreciseConsoleLogFormatter.java b/server/core/src/main/java/io/eiren/util/logging/PreciseConsoleLogFormatter.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/PreciseConsoleLogFormatter.java rename to server/core/src/main/java/io/eiren/util/logging/PreciseConsoleLogFormatter.java diff --git a/server/src/main/java/io/eiren/util/logging/ShortConsoleLogFormatter.java b/server/core/src/main/java/io/eiren/util/logging/ShortConsoleLogFormatter.java similarity index 100% rename from server/src/main/java/io/eiren/util/logging/ShortConsoleLogFormatter.java rename to server/core/src/main/java/io/eiren/util/logging/ShortConsoleLogFormatter.java diff --git a/server/src/main/java/io/github/axisangles/ktmath/EulerAngles.kt b/server/core/src/main/java/io/github/axisangles/ktmath/EulerAngles.kt similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/EulerAngles.kt rename to server/core/src/main/java/io/github/axisangles/ktmath/EulerAngles.kt diff --git a/server/src/main/java/io/github/axisangles/ktmath/LICENSE-APACHE b/server/core/src/main/java/io/github/axisangles/ktmath/LICENSE-APACHE similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/LICENSE-APACHE rename to server/core/src/main/java/io/github/axisangles/ktmath/LICENSE-APACHE diff --git a/server/src/main/java/io/github/axisangles/ktmath/LICENSE-MIT b/server/core/src/main/java/io/github/axisangles/ktmath/LICENSE-MIT similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/LICENSE-MIT rename to server/core/src/main/java/io/github/axisangles/ktmath/LICENSE-MIT diff --git a/server/src/main/java/io/github/axisangles/ktmath/Matrix3.kt b/server/core/src/main/java/io/github/axisangles/ktmath/Matrix3.kt similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/Matrix3.kt rename to server/core/src/main/java/io/github/axisangles/ktmath/Matrix3.kt diff --git a/server/src/main/java/io/github/axisangles/ktmath/Quaternion.kt b/server/core/src/main/java/io/github/axisangles/ktmath/Quaternion.kt similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/Quaternion.kt rename to server/core/src/main/java/io/github/axisangles/ktmath/Quaternion.kt diff --git a/server/src/main/java/io/github/axisangles/ktmath/Transform.kt b/server/core/src/main/java/io/github/axisangles/ktmath/Transform.kt similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/Transform.kt rename to server/core/src/main/java/io/github/axisangles/ktmath/Transform.kt diff --git a/server/src/main/java/io/github/axisangles/ktmath/Vector3.kt b/server/core/src/main/java/io/github/axisangles/ktmath/Vector3.kt similarity index 100% rename from server/src/main/java/io/github/axisangles/ktmath/Vector3.kt rename to server/core/src/main/java/io/github/axisangles/ktmath/Vector3.kt diff --git a/server/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java b/server/core/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java similarity index 100% rename from server/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java rename to server/core/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java diff --git a/server/src/test/java/io/github/axisangles/ktmath/QuaternionTest.kt b/server/core/src/test/java/io/github/axisangles/ktmath/QuaternionTest.kt similarity index 100% rename from server/src/test/java/io/github/axisangles/ktmath/QuaternionTest.kt rename to server/core/src/test/java/io/github/axisangles/ktmath/QuaternionTest.kt diff --git a/server/desktop/.gitignore b/server/desktop/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/server/desktop/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/server/desktop/build.gradle.kts b/server/desktop/build.gradle.kts new file mode 100644 index 000000000..43377b3d0 --- /dev/null +++ b/server/desktop/build.gradle.kts @@ -0,0 +1,110 @@ +/* + * This file was generated by the Gradle "init" task. + * + * This generated file contains a sample Java Library project to get you started. + * For more details take a look at the Java Libraries chapter in the Gradle + * User Manual available at https://docs.gradle.org/6.3/userguide/java_library_plugin.html + */ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import java.io.ByteArrayOutputStream + +plugins { + kotlin("jvm") + application + id("com.github.johnrengelman.shadow") + id("com.github.gmazzo.buildconfig") +} + +kotlin { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} +tasks.withType { + kotlinOptions.jvmTarget = "17" +} + +// Set compiler to use UTF-8 +tasks.withType { + options.encoding = "UTF-8" +} +tasks.withType { + systemProperty("file.encoding", "UTF-8") +} +tasks.withType { + options.encoding = "UTF-8" +} + +tasks + .withType>() + .configureEach { + compilerOptions + .languageVersion + .set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + ) + } + +allprojects { + repositories { + // Use jcenter for resolving dependencies. + // You can declare any Maven/Ivy/file repository here. + mavenCentral() + } +} + +dependencies { + implementation(project(":server:core")) + + implementation("commons-cli:commons-cli:1.5.0") + implementation("org.apache.commons:commons-lang3:3.12.0") +} + + +tasks.shadowJar { + minimize { + exclude(dependency("com.fazecast:jSerialComm:.*")) + exclude(dependency("net.java.dev.jna:.*:.*")) + exclude(dependency("com.google.flatbuffers:flatbuffers-java:.*")) + + exclude(project(":solarxr-protocol")) + } + archiveBaseName.set("slimevr") + archiveClassifier.set("") + archiveVersion.set("") +} +application { + mainClass.set("dev.slimevr.Main") +} + +fun String.runCommand(currentWorkingDir: File = file("./")): String { + val byteOut = ByteArrayOutputStream() + project.exec { + workingDir = currentWorkingDir + commandLine = this@runCommand.split("\\s".toRegex()) + standardOutput = byteOut + } + return String(byteOut.toByteArray()).trim() +} + +buildConfig { + val gitCommitHash = "git rev-parse --verify --short HEAD".runCommand().trim() + val gitVersionTag = "git --no-pager tag --points-at HEAD".runCommand().trim() + val gitClean = "git status --porcelain".runCommand().trim().isEmpty() + useKotlinOutput { topLevelConstants = true } + packageName("dev.slimevr.desktop") + + buildConfigField("String", "GIT_COMMIT_HASH", "\"${gitCommitHash}\"") + buildConfigField("String", "GIT_VERSION_TAG", "\"${gitVersionTag}\"") + buildConfigField("boolean", "GIT_CLEAN", gitClean.toString()) +} + +tasks.getByName("run", JavaExec::class) { + standardInput = System.`in` + args = listOf("run") +} diff --git a/server/desktop/src/main/java/dev/slimevr/desktop/Main.kt b/server/desktop/src/main/java/dev/slimevr/desktop/Main.kt new file mode 100644 index 000000000..a9c553e1f --- /dev/null +++ b/server/desktop/src/main/java/dev/slimevr/desktop/Main.kt @@ -0,0 +1,121 @@ +@file:JvmName("Main") + +package dev.slimevr.desktop + +import dev.slimevr.Keybinding +import dev.slimevr.VRServer +import io.eiren.util.logging.LogManager +import org.apache.commons.cli.CommandLine +import org.apache.commons.cli.CommandLineParser +import org.apache.commons.cli.DefaultParser +import org.apache.commons.cli.HelpFormatter +import org.apache.commons.cli.Options +import org.apache.commons.lang3.SystemUtils +import java.io.File +import java.io.IOException +import java.lang.System +import java.net.ServerSocket +import javax.swing.JOptionPane +import kotlin.concurrent.thread +import kotlin.system.exitProcess + +val VERSION = + (GIT_VERSION_TAG.ifEmpty { GIT_COMMIT_HASH }) + + if (GIT_CLEAN) "" else "-dirty" + +fun main(args: Array) { + System.setProperty("awt.useSystemAAFontSettings", "on") + System.setProperty("swing.aatext", "true") + + val parser: CommandLineParser = DefaultParser() + val formatter = HelpFormatter() + val options = Options() + options.addOption("h", "help", false, "Show help") + options.addOption("V", "version", false, "Show version") + val cmd: CommandLine = try { + parser.parse(options, args, true) + } catch (e: org.apache.commons.cli.ParseException) { + formatter.printHelp("slimevr.jar", options) + exitProcess(1) + } + + if (cmd.hasOption("help")) { + formatter.printHelp("slimevr.jar", options) + exitProcess(0) + } + if (cmd.hasOption("version")) { + println("SlimeVR Server $VERSION") + exitProcess(0) + } + + if (cmd.args.isEmpty()) { + System.err.println("No command specified, expected 'run'") + exitProcess(1) + } + if (!cmd.args[0].equals("run", true)) { + System.err.println("Unknown command: ${cmd.args[0]}, expected 'run'") + exitProcess(1) + } + + val dir = File("").absoluteFile + try { + LogManager.initialize(dir) + } catch (e1: java.lang.Exception) { + e1.printStackTrace() + } + LogManager.info("Running version $VERSION") + if (!SystemUtils.isJavaVersionAtLeast(org.apache.commons.lang3.JavaVersion.JAVA_17)) { + LogManager.severe("SlimeVR start-up error! A minimum of Java 17 is required.") + JOptionPane + .showMessageDialog( + null, + "SlimeVR start-up error! A minimum of Java 17 is required.", + "SlimeVR: Java Runtime Mismatch", + JOptionPane.ERROR_MESSAGE + ) + LogManager.closeLogger() + return + } + try { + // This is disabled because the config can't be read at this point + // new ServerSocket(6969).close(); + ServerSocket(35903).close() + ServerSocket(21110).close() + } catch (e: IOException) { + LogManager + .severe( + "SlimeVR start-up error! Required ports are busy. " + + "Make sure there is no other instance of SlimeVR Server running." + ) + JOptionPane + .showMessageDialog( + null, + "SlimeVR start-up error! Required ports are busy. " + + "Make sure there is no other instance of SlimeVR Server running.", + "SlimeVR: Ports are busy", + JOptionPane.ERROR_MESSAGE + ) + LogManager.closeLogger() + return + } + try { + val vrServer = VRServer() + vrServer.start() + Keybinding(vrServer) + val scanner = thread { + while (true) { + if (readln() == "exit") { + vrServer.interrupt() + break + } + } + } + vrServer.join() + scanner.join() + LogManager.closeLogger() + exitProcess(0) + } catch (e: Throwable) { + e.printStackTrace() + exitProcess(1) + } +} diff --git a/server/src/main/java/dev/slimevr/VRServer.java b/server/src/main/java/dev/slimevr/VRServer.java deleted file mode 100644 index 34b239008..000000000 --- a/server/src/main/java/dev/slimevr/VRServer.java +++ /dev/null @@ -1,509 +0,0 @@ -package dev.slimevr; - -import com.jme3.system.NanoTimer; -import dev.slimevr.autobone.AutoBoneHandler; -import dev.slimevr.bridge.Bridge; -import dev.slimevr.config.ConfigManager; -import dev.slimevr.osc.OSCHandler; -import dev.slimevr.osc.OSCRouter; -import dev.slimevr.osc.VMCHandler; -import dev.slimevr.osc.VRCOSCHandler; -import dev.slimevr.platform.SteamVRBridge; -import dev.slimevr.platform.linux.UnixSocketBridge; -import dev.slimevr.platform.windows.WindowsNamedPipeBridge; -import dev.slimevr.posestreamer.BVHRecorder; -import dev.slimevr.protocol.ProtocolAPI; -import dev.slimevr.reset.ResetHandler; -import dev.slimevr.serial.ProvisioningHandler; -import dev.slimevr.serial.SerialHandler; -import dev.slimevr.setup.TapSetupHandler; -import dev.slimevr.status.StatusSystem; -import dev.slimevr.tracking.processor.HumanPoseManager; -import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; -import dev.slimevr.tracking.trackers.DeviceManager; -import dev.slimevr.tracking.trackers.Tracker; -import dev.slimevr.tracking.trackers.TrackerPosition; -import dev.slimevr.tracking.trackers.udp.TrackersUDPServer; -import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.websocketapi.WebSocketVRBridge; -import io.eiren.util.OperatingSystem; -import io.eiren.util.ann.ThreadSafe; -import io.eiren.util.ann.ThreadSecure; -import io.eiren.util.collections.FastList; -import io.eiren.util.logging.LogManager; -import solarxr_protocol.datatypes.TrackerIdT; - -import java.nio.file.Paths; -import java.util.List; -import java.util.Queue; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Consumer; - - -public class VRServer extends Thread { - - public final HumanPoseManager humanPoseManager; - public final Tracker hmdTracker; - private final List trackers = new FastList<>(); - private final TrackersUDPServer trackersServer; - private final List bridges = new FastList<>(); - private final Queue tasks = new LinkedBlockingQueue<>(); - private final List> newTrackersConsumers = new FastList<>(); - private final List onTick = new FastList<>(); - private final OSCRouter oscRouter; - private final VRCOSCHandler vrcOSCHandler; - private final VMCHandler vmcHandler; - private final DeviceManager deviceManager; - private final BVHRecorder bvhRecorder; - private final SerialHandler serialHandler; - private final AutoBoneHandler autoBoneHandler; - private final TapSetupHandler tapSetupHandler; - private final ProtocolAPI protocolAPI; - private final ConfigManager configManager; - private final Timer timer = new Timer(); - private final NanoTimer fpsTimer = new NanoTimer(); - private final ProvisioningHandler provisioningHandler; - private final static AtomicInteger nextLocalTrackerId = new AtomicInteger(); - private final ResetHandler resetHandler; - private final StatusSystem statusSystem = new StatusSystem(); - - /** - * This function is used by VRWorkout, do not remove! - */ - public VRServer() { - this("vrconfig.yml"); - } - - public VRServer(String configPath) { - // UwU - super("VRServer"); - - this.configManager = new ConfigManager(configPath); - this.configManager.loadConfig(); - - deviceManager = new DeviceManager(this); - - serialHandler = new SerialHandler(); - - provisioningHandler = new ProvisioningHandler(this); - - resetHandler = new ResetHandler(); - tapSetupHandler = new TapSetupHandler(); - - autoBoneHandler = new AutoBoneHandler(this); - protocolAPI = new ProtocolAPI(this); - - hmdTracker = new Tracker( - null, - 0, - "HMD", - "HMD", - TrackerPosition.HEAD, - null, - true, - true, - false, - false, - false, - true - ); - - humanPoseManager = new HumanPoseManager(this); - List computedTrackers = humanPoseManager.getComputedTrackers(); - - // Start server for SlimeVR trackers - int trackerPort = configManager.getVrConfig().getServer().getTrackerPort(); - LogManager.info("Starting the tracker server on port " + trackerPort + "..."); - trackersServer = new TrackersUDPServer( - trackerPort, - "Sensors UDP server", - this::registerTracker - ); - - final SteamVRBridge driverBridge; - if (OperatingSystem.getCurrentPlatform() == OperatingSystem.WINDOWS) { - - // Create named pipe bridge for SteamVR driver - driverBridge = new WindowsNamedPipeBridge( - this, - hmdTracker, - "steamvr", - "SteamVR Driver Bridge", - "\\\\.\\pipe\\SlimeVRDriver", - computedTrackers - ); - tasks.add(driverBridge::startBridge); - bridges.add(driverBridge); - - // Create named pipe bridge for SteamVR input - // TODO: how do we want to handle HMD input from the feeder app? - WindowsNamedPipeBridge feederBridge = new WindowsNamedPipeBridge( - this, - null, - "steamvr_feeder", - "SteamVR Feeder Bridge", - "\\\\.\\pipe\\SlimeVRInput", - new FastList<>() - ); - tasks.add(feederBridge::startBridge); - bridges.add(feederBridge); - } else if (OperatingSystem.getCurrentPlatform() == OperatingSystem.LINUX) { - SteamVRBridge linuxBridge = null; - try { - linuxBridge = new UnixSocketBridge( - this, - hmdTracker, - "steamvr", - "SteamVR Driver Bridge", - Paths.get(OperatingSystem.getTempDirectory(), "SlimeVRDriver").toString(), - computedTrackers - ); - } catch (Exception ex) { - LogManager.severe("Failed to initiate Unix socket, disabling driver bridge...", ex); - } - driverBridge = linuxBridge; - if (driverBridge != null) { - tasks.add(driverBridge::startBridge); - bridges.add(driverBridge); - } - - try { - SteamVRBridge feederBridge = new UnixSocketBridge( - this, - null, - "steamvr_feeder", - "SteamVR Feeder Bridge", - Paths.get(OperatingSystem.getTempDirectory(), "SlimeVRInput").toString(), - new FastList<>() - ); - - tasks.add(feederBridge::startBridge); - bridges.add(feederBridge); - } catch (Exception ex) { - LogManager.severe("Failed to initiate Unix socket, disabling feeder bridge...", ex); - } - } else { - driverBridge = null; - } - - // Add shutdown hook - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - try { - if (driverBridge instanceof UnixSocketBridge linuxBridge) { - // Auto-close Linux SteamVR bridge on JVM shutdown - linuxBridge.close(); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - })); - - // Create WebSocket server - WebSocketVRBridge wsBridge = new WebSocketVRBridge(hmdTracker, computedTrackers, this); - tasks.add(wsBridge::startBridge); - bridges.add(wsBridge); - - // Initialize OSC handlers - vrcOSCHandler = new VRCOSCHandler( - this, - humanPoseManager, - driverBridge, - getConfigManager().getVrConfig().getVrcOSC(), - computedTrackers - ); - vmcHandler = new VMCHandler( - this, - humanPoseManager, - getConfigManager().getVrConfig().getVMC(), - computedTrackers - ); - - // Initialize OSC router - FastList oscHandlers = new FastList<>(); - oscHandlers.add(vrcOSCHandler); - oscHandlers.add(vmcHandler); - oscRouter = new OSCRouter(getConfigManager().getVrConfig().getOscRouter(), oscHandlers); - - bvhRecorder = new BVHRecorder(this); - - registerTracker(hmdTracker); - for (Tracker tracker : computedTrackers) { - registerTracker(tracker); - } - } - - public boolean hasBridge(Class bridgeClass) { - for (Bridge bridge : bridges) { - if (bridgeClass.isAssignableFrom(bridge.getClass())) { - return true; - } - } - return false; - } - - @ThreadSafe - public E getVRBridge(Class bridgeClass) { - for (Bridge bridge : bridges) { - if (bridgeClass.isAssignableFrom(bridge.getClass())) { - return bridgeClass.cast(bridge); - } - } - return null; - } - - - public void addOnTick(Runnable runnable) { - this.onTick.add(runnable); - } - - @ThreadSafe - public void addNewTrackerConsumer(Consumer consumer) { - queueTask(() -> { - newTrackersConsumers.add(consumer); - for (Tracker tracker : trackers) { - consumer.accept(tracker); - } - }); - } - - @ThreadSafe - public void trackerUpdated(Tracker tracker) { - queueTask(() -> { - humanPoseManager.trackerUpdated(tracker); - this.getConfigManager().getVrConfig().writeTrackerConfig(tracker); - this.getConfigManager().saveConfig(); - }); - } - - @ThreadSafe - public void addSkeletonUpdatedCallback(Consumer consumer) { - queueTask(() -> humanPoseManager.addSkeletonUpdatedCallback(consumer)); - } - - @Override - @VRServerThread - public void run() { - trackersServer.start(); - while (true) { - // final long start = System.currentTimeMillis(); - fpsTimer.update(); - do { - Runnable task = tasks.poll(); - if (task == null) - break; - task.run(); - } while (true); - for (Runnable task : onTick) { - task.run(); - } - for (Bridge bridge : bridges) { - bridge.dataRead(); - } - for (Tracker tracker : trackers) { - tracker.tick(); - } - humanPoseManager.update(); - for (Bridge bridge : bridges) { - bridge.dataWrite(); - } - vrcOSCHandler.update(); - vmcHandler.update(); - // final long time = System.currentTimeMillis() - start; - try { - Thread.sleep(1); // 1000Hz - } catch (InterruptedException error) { - LogManager.info("VRServer thread interrupted"); - break; - } - } - } - - @ThreadSafe - public void queueTask(Runnable r) { - tasks.add(r); - } - - public static int getNextLocalTrackerId() { - return nextLocalTrackerId.incrementAndGet(); - } - - public static int getCurrentLocalTrackerId() { - return nextLocalTrackerId.get(); - } - - @VRServerThread - private void trackerAdded(Tracker tracker) { - humanPoseManager.trackerAdded(tracker); - } - - @ThreadSecure - public void registerTracker(Tracker tracker) { - this.getConfigManager().getVrConfig().readTrackerConfig(tracker); - queueTask(() -> { - trackers.add(tracker); - trackerAdded(tracker); - for (Consumer tc : newTrackersConsumers) { - tc.accept(tracker); - } - }); - } - - @ThreadSafe - public void updateSkeletonModel() { - queueTask(humanPoseManager::updateSkeletonModelFromServer); - } - - public void resetTrackersFull(String resetSourceName) { - queueTask(() -> humanPoseManager.resetTrackersFull(resetSourceName)); - } - - public void resetTrackersYaw(String resetSourceName) { - queueTask(() -> humanPoseManager.resetTrackersYaw(resetSourceName)); - } - - public void resetTrackersMounting(String resetSourceName) { - queueTask(() -> humanPoseManager.resetTrackersMounting(resetSourceName)); - } - - public void scheduleResetTrackersFull(String resetSourceName, long delay) { - TimerTask resetTask = new TimerTask() { - public void run() { - queueTask(() -> humanPoseManager.resetTrackersFull(resetSourceName)); - } - }; - timer.schedule(resetTask, delay); - } - - public void scheduleResetTrackersYaw(String resetSourceName, long delay) { - TimerTask yawResetTask = new TimerTask() { - public void run() { - queueTask(() -> humanPoseManager.resetTrackersYaw(resetSourceName)); - } - }; - timer.schedule(yawResetTask, delay); - } - - public void scheduleResetTrackersMounting(String resetSourceName, long delay) { - TimerTask resetMountingTask = new TimerTask() { - public void run() { - queueTask(() -> humanPoseManager.resetTrackersMounting(resetSourceName)); - } - }; - timer.schedule(resetMountingTask, delay); - } - - public void setLegTweaksEnabled(boolean value) { - queueTask(() -> humanPoseManager.setLegTweaksEnabled(value)); - } - - public void setSkatingReductionEnabled(boolean value) { - queueTask(() -> humanPoseManager.setSkatingCorrectionEnabled(value)); - } - - public void setFloorClipEnabled(boolean value) { - queueTask(() -> humanPoseManager.setFloorClipEnabled(value)); - } - - public int getTrackersCount() { - return trackers.size(); - } - - public List getAllTrackers() { - return new FastList<>(trackers); - } - - public Tracker getTrackerById(TrackerIdT id) { - for (Tracker tracker : trackers) { - if (tracker.getTrackerNum() != id.getTrackerNum()) { - continue; - } - - // Handle synthetic devices - if (id.getDeviceId() == null && tracker.getDevice() == null) { - return tracker; - } - - if ( - tracker.getDevice() != null - && id.getDeviceId() != null - && id.getDeviceId().getId() == tracker.getDevice().getId() - ) { - // This is a physical tracker, and both device id and the - // tracker num match - return tracker; - } - } - return null; - } - - public BVHRecorder getBvhRecorder() { - return this.bvhRecorder; - } - - public SerialHandler getSerialHandler() { - return this.serialHandler; - } - - public ResetHandler getResetHandler() { - return this.resetHandler; - } - - public TapSetupHandler getTapSetupHandler() { - return this.tapSetupHandler; - } - - public AutoBoneHandler getAutoBoneHandler() { - return this.autoBoneHandler; - } - - public ProtocolAPI getProtocolAPI() { - return protocolAPI; - } - - public TrackersUDPServer getTrackersServer() { - return trackersServer; - } - - public OSCRouter getOSCRouter() { - return oscRouter; - } - - public VRCOSCHandler getVrcOSCHandler() { - return vrcOSCHandler; - } - - public VMCHandler getVMCHandler() { - return vmcHandler; - } - - public DeviceManager getDeviceManager() { - return deviceManager; - } - - public ConfigManager getConfigManager() { - return configManager; - } - - public NanoTimer getFpsTimer() { - return fpsTimer; - } - - public ProvisioningHandler getProvisioningHandler() { - return provisioningHandler; - } - - public StatusSystem getStatusSystem() { - return statusSystem; - } - - public void clearTrackersDriftCompensation() { - for (Tracker t : getAllTrackers()) { - if (t.isImu()) { - t.getResetsHandler().clearDriftCompensation(); - } - } - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index e8882fa8b..c09f5e2f3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,6 +15,20 @@ pluginManagement { google() mavenCentral() } + + val kotlinVersion: String by settings + val spotlessVersion: String by settings + val shadowJarVersion: String by settings + val buildconfigVersion: String by settings + plugins { + kotlin("plugin.serialization") version kotlinVersion + kotlin("jvm") version kotlinVersion + id("org.jetbrains.kotlin.android") version kotlinVersion + id("org.jetbrains.kotlin.jvm") version kotlinVersion + id("com.diffplug.spotless") version spotlessVersion + id("com.github.johnrengelman.shadow") version shadowJarVersion + id("com.github.gmazzo.buildconfig") version buildconfigVersion + } } include(":solarxr-protocol") @@ -22,3 +36,6 @@ project(":solarxr-protocol").projectDir = File("solarxr-protocol/protocol/java") include(":server") project(":server").projectDir = File("server") +include(":server:core") +include(":server:desktop") +//include(":server:android")