diff --git a/README.md b/README.md index 4f0dc99..1e9d16e 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ Now, they only need to enter their name on top, and they're set. To trigger the buzzer, they just need to push the large surface. After a short amount of time they will be notified whether they were the fastest players (button turns green) or not (it turns red). -### Game-Master-Client +### Game-Moderator-Client -You can access this client from `http://:8888/clients/master/`. +You can access this client from `http://:8888/clients/moderator/`. Your surface consists of three parts. After a game has started, and some player decided they want to do the turn, these have the following functions: * On top, there's a large surface showing you the fastest player if any. diff --git a/build.gradle.kts b/build.gradle.kts index 10e4eef..01f3fe8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,23 +12,25 @@ plugins { } group = "de.pheerai.buzzer" -version = "0.0.2" +version = "0.0.3" application { mainClass.set("de.pheerai.buzzer.ApplicationKt") - applicationDefaultJvmArgs = listOf("--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED", "-Dio.netty.tryReflectionSetAccessible=true") + applicationDefaultJvmArgs = + listOf("--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED", "-Dio.netty.tryReflectionSetAccessible=true") } repositories { mavenCentral() + google() } dependencies { implementation("io.ktor:ktor-server-core:$ktor_version") - implementation("io.ktor:ktor-websockets:$ktor_version") - implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:$kotlinx_html_version") - implementation("io.ktor:ktor-html-builder:$ktor_version") implementation("io.ktor:ktor-server-netty:$ktor_version") + implementation("io.ktor:ktor-server-websockets:$ktor_version") + implementation("io.ktor:ktor-server-html-builder:$ktor_version") + implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:$kotlinx_html_version") implementation("ch.qos.logback:logback-classic:$logback_version") testImplementation("io.ktor:ktor-server-tests:$ktor_version") testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlin_version") diff --git a/gradle.properties b/gradle.properties index 3818d16..1edc6c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,6 @@ -ktor_version=1.6.4 -kotlin_version=1.6.0 -logback_version=1.2.7 -kotlinx_html_version=0.7.3 +ktor_version=2.0.1 +kotlin_version=1.6.20 +logback_version=1.2.11 +kotlinx_html_version=0.7.5 +shadowjar_version=7.1.2 kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fbce071..92f06b5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index b792cec..e348cd8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,7 +2,9 @@ rootProject.name = "server" pluginManagement { plugins { - kotlin("jvm") version "1.6.0" - id("com.github.johnrengelman.shadow") version "7.1.0" + val kotlin_version: String by settings + val shadowjar_version: String by settings + kotlin("jvm") version kotlin_version + id("com.github.johnrengelman.shadow") version shadowjar_version } } diff --git a/src/main/kotlin/de/pheerai/buzzer/clients/gameMasterClient.kt b/src/main/kotlin/de/pheerai/buzzer/clients/gameMasterClient.kt index 5447817..238a8bc 100644 --- a/src/main/kotlin/de/pheerai/buzzer/clients/gameMasterClient.kt +++ b/src/main/kotlin/de/pheerai/buzzer/clients/gameMasterClient.kt @@ -3,7 +3,7 @@ package de.pheerai.buzzer.clients import de.pheerai.buzzer.alpine.* import kotlinx.html.* -fun HTML.createGameMasterDocument() { +fun HTML.createGameModeratorDocument() { head { meta { charset = "UTF-8" } title { +"JS Client" } @@ -13,7 +13,7 @@ fun HTML.createGameMasterDocument() { type = "text/css" ) link( - href = "/assets/gamemaster.css", + href = "/assets/gamemoderator.css", rel = "stylesheet", type = "text/css" ) @@ -30,7 +30,7 @@ fun HTML.createGameMasterDocument() { //language=JavaScript """ () => { - startWebSocket('/socket/master', (ev) => { + startWebSocket('/socket/moderator', (ev) => { if (receivedNames.length === 0) { firstPlayer = ev.data } diff --git a/src/main/kotlin/de/pheerai/buzzer/data/InlineClasses.kt b/src/main/kotlin/de/pheerai/buzzer/data/InlineClasses.kt index c4c4b8a..2ea4a42 100644 --- a/src/main/kotlin/de/pheerai/buzzer/data/InlineClasses.kt +++ b/src/main/kotlin/de/pheerai/buzzer/data/InlineClasses.kt @@ -1,8 +1,8 @@ package de.pheerai.buzzer.data -import io.ktor.http.cio.websocket.* +import io.ktor.websocket.* @JvmInline value class PlayerSocket(val session: WebSocketSession) @JvmInline -value class GameMasterSocket(val session: WebSocketSession) +value class GameModeratorSocket(val session: WebSocketSession) diff --git a/src/main/kotlin/de/pheerai/buzzer/data/SessionStorage.kt b/src/main/kotlin/de/pheerai/buzzer/data/SessionStorage.kt index 2fc1cb4..15c4abb 100644 --- a/src/main/kotlin/de/pheerai/buzzer/data/SessionStorage.kt +++ b/src/main/kotlin/de/pheerai/buzzer/data/SessionStorage.kt @@ -4,7 +4,7 @@ import java.util.* object SessionStorage { val playerSessions = synchronisedCollectionOf() - val gameMasterSessions = synchronisedCollectionOf() + val gameModeratorSessions = synchronisedCollectionOf() } fun synchronisedCollectionOf(vararg data: T): MutableCollection { diff --git a/src/main/kotlin/de/pheerai/buzzer/handlers/handleGameMasterSocket.kt b/src/main/kotlin/de/pheerai/buzzer/handlers/handleGameMasterSocket.kt index 8638beb..1f443d3 100644 --- a/src/main/kotlin/de/pheerai/buzzer/handlers/handleGameMasterSocket.kt +++ b/src/main/kotlin/de/pheerai/buzzer/handlers/handleGameMasterSocket.kt @@ -1,13 +1,13 @@ package de.pheerai.buzzer.handlers -import de.pheerai.buzzer.data.GameMasterSocket +import de.pheerai.buzzer.data.GameModeratorSocket import de.pheerai.buzzer.data.SessionStorage -import io.ktor.http.cio.websocket.* +import io.ktor.websocket.* import kotlinx.coroutines.isActive import org.slf4j.Logger -suspend fun WebSocketSession.handleGameMasterSocket(log: Logger) { - SessionStorage.gameMasterSessions.add(GameMasterSocket(this)) +suspend fun WebSocketSession.handleGameModeratorSocket(log: Logger) { + SessionStorage.gameModeratorSessions.add(GameModeratorSocket(this)) for (frame in incoming) { when (frame) { is Frame.Text -> { diff --git a/src/main/kotlin/de/pheerai/buzzer/handlers/handlePlayerSocket.kt b/src/main/kotlin/de/pheerai/buzzer/handlers/handlePlayerSocket.kt index f300dd8..a53030e 100644 --- a/src/main/kotlin/de/pheerai/buzzer/handlers/handlePlayerSocket.kt +++ b/src/main/kotlin/de/pheerai/buzzer/handlers/handlePlayerSocket.kt @@ -2,7 +2,7 @@ package de.pheerai.buzzer.handlers import de.pheerai.buzzer.data.PlayerSocket import de.pheerai.buzzer.data.SessionStorage -import io.ktor.http.cio.websocket.* +import io.ktor.websocket.* import kotlinx.coroutines.isActive import org.slf4j.Logger @@ -13,7 +13,7 @@ suspend fun WebSocketSession.handlePlayerSocket(log: Logger) { is Frame.Text -> { val text = frame.readText() log.info("Username: $text") - SessionStorage.gameMasterSessions.filter { it.session.isActive } + SessionStorage.gameModeratorSessions.filter { it.session.isActive } .forEach { it.session.send(text) } } else -> {} diff --git a/src/main/kotlin/de/pheerai/buzzer/routing/setupRoutes.kt b/src/main/kotlin/de/pheerai/buzzer/routing/setupRoutes.kt index 94ac00d..f66b05f 100644 --- a/src/main/kotlin/de/pheerai/buzzer/routing/setupRoutes.kt +++ b/src/main/kotlin/de/pheerai/buzzer/routing/setupRoutes.kt @@ -1,27 +1,27 @@ package de.pheerai.buzzer.routing -import de.pheerai.buzzer.clients.createGameMasterDocument +import de.pheerai.buzzer.clients.createGameModeratorDocument import de.pheerai.buzzer.clients.createPlayerDocument -import de.pheerai.buzzer.handlers.handleGameMasterSocket +import de.pheerai.buzzer.handlers.handleGameModeratorSocket import de.pheerai.buzzer.handlers.handlePlayerSocket -import io.ktor.application.* -import io.ktor.html.* -import io.ktor.http.content.* -import io.ktor.routing.* -import io.ktor.websocket.* +import io.ktor.server.application.* +import io.ktor.server.html.* +import io.ktor.server.http.content.* +import io.ktor.server.routing.* +import io.ktor.server.websocket.* import org.slf4j.Logger fun Application.configureRoutes() { routing { assetRoutes() clientRoutes() - websocketRoutes(log) + websocketRoutes(this@configureRoutes.log) } } private fun Routing.websocketRoutes(log: Logger) { webSocket("/socket/player") { handlePlayerSocket(log) } - webSocket("/socket/master") { handleGameMasterSocket(log) } + webSocket("/socket/moderator") { handleGameModeratorSocket(log) } } private fun Routing.clientRoutes() { @@ -37,9 +37,9 @@ private fun Routing.clientRoutes() { } } - get("/client/master") { + get("/client/moderator") { call.respondHtml { - createGameMasterDocument() + createGameModeratorDocument() } } } diff --git a/src/main/kotlin/de/pheerai/buzzer/setup/setupPlugins.kt b/src/main/kotlin/de/pheerai/buzzer/setup/setupPlugins.kt index 16cc08b..5f4862e 100644 --- a/src/main/kotlin/de/pheerai/buzzer/setup/setupPlugins.kt +++ b/src/main/kotlin/de/pheerai/buzzer/setup/setupPlugins.kt @@ -1,6 +1,6 @@ package de.pheerai.buzzer.setup -import io.ktor.application.* +import io.ktor.server.application.* fun Application.setupPlugins() { installWebSockets() diff --git a/src/main/kotlin/de/pheerai/buzzer/setup/webSockets.kt b/src/main/kotlin/de/pheerai/buzzer/setup/webSockets.kt index 2d10664..59bd5a8 100644 --- a/src/main/kotlin/de/pheerai/buzzer/setup/webSockets.kt +++ b/src/main/kotlin/de/pheerai/buzzer/setup/webSockets.kt @@ -1,8 +1,7 @@ package de.pheerai.buzzer.setup -import io.ktor.application.* -import io.ktor.http.cio.websocket.* -import io.ktor.websocket.* +import io.ktor.server.application.* +import io.ktor.server.websocket.* import java.time.Duration fun Application.installWebSockets() { diff --git a/src/main/kotlin/module-info.java b/src/main/kotlin/module-info.java index 872b09b..69ba8ab 100644 --- a/src/main/kotlin/module-info.java +++ b/src/main/kotlin/module-info.java @@ -1,12 +1,10 @@ module buzzer { - requires ktor.server.host.common.jvm; - requires ktor.server.netty.jvm; - requires ktor.server.core.jvm; - requires ktor.websockets.jvm; - requires ktor.html.builder.jvm; requires org.slf4j; - requires ktor.http.cio.jvm; requires kotlinx.coroutines.core.jvm; requires kotlin.stdlib; requires kotlinx.html.jvm; + requires io.ktor.websockets; + requires io.ktor.server.core; + requires io.ktor.server.websockets; + requires io.ktor.server.html.builder; } diff --git a/src/main/resources/css/gamemaster.css b/src/main/resources/css/gamemoderator.css similarity index 100% rename from src/main/resources/css/gamemaster.css rename to src/main/resources/css/gamemoderator.css