diff --git a/build.gradle b/build.gradle index f43802d..127bc1c 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ dependencies { } group = 'org.team5499' -version = '0.4.3' /* Change this when deploying a new version */ +version = '0.5.0' /* Change this when deploying a new version */ task sourcesJar(type: Jar) { from sourceSets.main.allJava diff --git a/src/main/kotlin/org/team5499/dashboard/Dashboard.kt b/src/main/kotlin/org/team5499/dashboard/Dashboard.kt index dd52522..e077d88 100644 --- a/src/main/kotlin/org/team5499/dashboard/Dashboard.kt +++ b/src/main/kotlin/org/team5499/dashboard/Dashboard.kt @@ -129,9 +129,17 @@ object Dashboard { null }) + Spark.awaitInitialization() SocketHandler.startBroadcastThread() // start broadcasting data } + fun stop() { + SocketHandler.stopBroadcastThread() + SocketHandler.awaitStop() + Spark.stop() + Spark.awaitStop() + } + fun setVariable(key: String, value: Any) { variableUpdates.put(key, value) } diff --git a/src/main/kotlin/org/team5499/dashboard/DashboardVar.kt b/src/main/kotlin/org/team5499/dashboard/DashboardVar.kt index f773ca8..3fe03b6 100644 --- a/src/main/kotlin/org/team5499/dashboard/DashboardVar.kt +++ b/src/main/kotlin/org/team5499/dashboard/DashboardVar.kt @@ -27,17 +27,23 @@ class DashboardVar(var initValue: T) { var isInit = false + fun getDashName(thisRef: Any?, property: KProperty<*>): String { + val packageLength = thisRef!!::class.java.getPackage().name.length + return "${thisRef::class.qualifiedName!!.substring(packageLength + 1)}.${property.name}" + } + operator fun getValue(thisRef: Any?, property: KProperty<*>): T { if (!isInit) { - Dashboard.setVariable(property.name, initValue as Any) + Dashboard.setVariable(getDashName(thisRef, property), initValue as Any) isInit = true + println(getDashName(thisRef, property)) return initValue } - return Dashboard.getVariable(property.name) + return Dashboard.getVariable(getDashName(thisRef, property)) } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { isInit = true - Dashboard.setVariable(property.name, value as Any) + Dashboard.setVariable(getDashName(thisRef, property), value as Any) } } diff --git a/src/main/kotlin/org/team5499/dashboard/SocketHandler.kt b/src/main/kotlin/org/team5499/dashboard/SocketHandler.kt index 37152bf..04aae4a 100644 --- a/src/main/kotlin/org/team5499/dashboard/SocketHandler.kt +++ b/src/main/kotlin/org/team5499/dashboard/SocketHandler.kt @@ -45,6 +45,15 @@ class SocketHandler { public fun startBroadcastThread() { broadcastThread.start() } + + public fun stopBroadcastThread() { + broadcastThread.stop() + } + + public fun awaitStop() { + broadcastThread.join() + } + public fun broadcastJSONMinusSession(json: JSONObject, session: Session) { for (s in sessions) { if (!s.equals(session)) { diff --git a/src/test/kotlin/tests/NestedVariableTest.kt b/src/test/kotlin/tests/NestedVariableTest.kt new file mode 100644 index 0000000..295f91a --- /dev/null +++ b/src/test/kotlin/tests/NestedVariableTest.kt @@ -0,0 +1,98 @@ +package tests + +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.fail + +import org.team5499.dashboard.Dashboard +import org.team5499.dashboard.DashboardVar +import org.team5499.dashboard.DashboardException + +class NestedVariableTest { + + companion object { + @BeforeAll + @JvmStatic + fun initDashboard() { + Dashboard.start(this, "playgroundConf.json") + Constants.initConstants() + } + + @AfterAll + @JvmStatic + fun tearDownDashboard() { + Dashboard.stop() + } + } + + @Test + fun checkForOuterVar() { + try { + assertEquals(Dashboard.getDouble("Constants.PROP"), 1.0) + } catch (de: DashboardException) { + fail("Constants.PROP not found") + } + } + + @Test + fun checkForFirstVar() { + try { + assertEquals(Dashboard.getDouble("Constants.First.PROP"), 2.0) + } catch (de: DashboardException) { + fail("Constants.First.PROP not found") + } + } + + @Test + fun checkForSecondVar() { + try { + assertEquals(Dashboard.getDouble("Constants.Second.PROP"), 3.0) + } catch (de: DashboardException) { + fail("Constants.Second.PROP not found") + } + } + + @Test + fun checkForOuterNestVar() { + try { + assertEquals(Dashboard.getDouble("Constants.Nest.PROP"), 4.0) + } catch (de: DashboardException) { + fail("Constants.Nest.PROP not found") + } + } + + @Test + fun checkForInnerNestVar() { + try { + assertEquals(Dashboard.getDouble("Constants.Nest.Inner.PROP"), 5.0) + } catch (de: DashboardException) { + fail("Constants.Nest.Inner.PROP not found") + } + } +} + +object Constants { + + public fun initConstants() { + DashboardVar.initClassProps(Constants::class) + } + + public var PROP by DashboardVar(1.0) + + object First { + public var PROP by DashboardVar(2.0) + } + + object Second { + public var PROP by DashboardVar(3.0) + } + + object Nest { + public var PROP by DashboardVar(4.0) + object Inner { + public var PROP by DashboardVar(5.0) + } + } +}