Better resource system
This commit is contained in:
parent
e39446cd47
commit
4f083db862
@ -9,14 +9,17 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val ktorVersion = "2.3.6"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
|
|
||||||
implementation("io.ktor:ktor-server-core-jvm:2.3.6")
|
implementation("io.ktor:ktor-server-core-jvm:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-server-netty-jvm:2.3.6")
|
implementation("io.ktor:ktor-server-netty-jvm:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-server-status-pages-jvm:2.3.6")
|
implementation("io.ktor:ktor-server-status-pages-jvm:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-server-default-headers-jvm:2.3.6")
|
implementation("io.ktor:ktor-server-default-headers-jvm:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-server-html-builder:2.3.6")
|
implementation("io.ktor:ktor-server-html-builder:$ktorVersion")
|
||||||
|
implementation("io.ktor:ktor-server-resources:$ktorVersion")
|
||||||
implementation("org.jetbrains.kotlin-wrappers:kotlin-css:1.0.0-pre.650")
|
implementation("org.jetbrains.kotlin-wrappers:kotlin-css:1.0.0-pre.650")
|
||||||
|
|
||||||
implementation("com.jcraft:jsch:0.1.55")
|
implementation("com.jcraft:jsch:0.1.55")
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import io.ktor.server.html.*
|
|||||||
import io.ktor.server.netty.*
|
import io.ktor.server.netty.*
|
||||||
import io.ktor.server.plugins.statuspages.*
|
import io.ktor.server.plugins.statuspages.*
|
||||||
import io.ktor.server.request.*
|
import io.ktor.server.request.*
|
||||||
|
import io.ktor.server.resources.*
|
||||||
import io.ktor.server.response.*
|
import io.ktor.server.response.*
|
||||||
import io.ktor.server.routing.*
|
import io.ktor.server.routing.*
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@ -53,6 +54,8 @@ object Main {
|
|||||||
call.respondText(text = "500: $writer", status = HttpStatusCode.InternalServerError)
|
call.respondText(text = "500: $writer", status = HttpStatusCode.InternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
install(Resources)
|
||||||
|
|
||||||
routing {
|
routing {
|
||||||
get("/layers") {
|
get("/layers") {
|
||||||
call.respondText(
|
call.respondText(
|
||||||
@ -61,6 +64,7 @@ object Main {
|
|||||||
LayerInfoModule.layerList.joinToString("\n")
|
LayerInfoModule.layerList.joinToString("\n")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
get("/rotation") {
|
get("/rotation") {
|
||||||
call.respondText(
|
call.respondText(
|
||||||
contentType = ContentType.Text.Plain,
|
contentType = ContentType.Text.Plain,
|
||||||
@ -68,18 +72,21 @@ object Main {
|
|||||||
LayerInfoModule.rotationList.joinToString("\n")
|
LayerInfoModule.rotationList.joinToString("\n")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
get("/currentPlayers") {
|
get("/currentPlayers") {
|
||||||
call.respondText(
|
call.respondText(
|
||||||
contentType = ContentType.Text.Plain,
|
contentType = ContentType.Text.Plain,
|
||||||
text = abstraction.getCurrentPlayers().toString()
|
text = abstraction.getCurrentPlayers().toString()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
get("/overview") {
|
get("/overview") {
|
||||||
val players = abstraction.getCurrentPlayers()
|
val players = abstraction.getCurrentPlayers()
|
||||||
val squadInfo = abstraction.getSquadList()
|
val squadInfo = abstraction.getSquadList()
|
||||||
|
|
||||||
call.respondHtmlTemplate(OverviewTemplate(players, squadInfo)) {}
|
call.respondHtmlTemplate(OverviewTemplate(players, squadInfo)) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
get("/overviewDemo") {
|
get("/overviewDemo") {
|
||||||
val players = RconAbstraction.ListPlayersOutput(
|
val players = RconAbstraction.ListPlayersOutput(
|
||||||
arrayListOf(
|
arrayListOf(
|
||||||
@ -117,28 +124,49 @@ object Main {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
call.respondHtmlTemplate(OverviewTemplate(players, squadInfo)) {}
|
call.respondHtmlTemplate(OverviewTemplate(players, squadInfo)) {}
|
||||||
}
|
}
|
||||||
get("/css") {
|
|
||||||
call.respondText(contentType = ContentType.Text.CSS, text = Css.cssString)
|
|
||||||
}
|
|
||||||
post("/kick") {
|
post("/kick") {
|
||||||
val playerId = call.request.queryParameters["id"]!!.toLong()
|
val playerId = call.request.queryParameters["id"]!!.toLong()
|
||||||
val reason = call.receiveText()
|
val reason = call.receiveText()
|
||||||
abstraction.kickPlayer(playerId, reason)
|
abstraction.kickPlayer(playerId, reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
post("/ban") {
|
post("/ban") {
|
||||||
val playerId = call.request.queryParameters["id"]!!.toLong()
|
val playerId = call.request.queryParameters["id"]!!.toLong()
|
||||||
val time = call.request.queryParameters["time"]!!
|
val time = call.request.queryParameters["time"]!!
|
||||||
val reason = call.receiveText()
|
val reason = call.receiveText()
|
||||||
abstraction.banPlayer(playerId, time, reason)
|
abstraction.banPlayer(playerId, time, reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
post("/message") {
|
post("/message") {
|
||||||
val playerId = call.request.queryParameters["id"]!!.toLong()
|
val playerId = call.request.queryParameters["id"]!!.toLong()
|
||||||
val message = call.receiveText()
|
val message = call.receiveText()
|
||||||
abstraction.messagePlayer(playerId, message)
|
abstraction.messagePlayer(playerId, message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get("resources/{path...}") {
|
||||||
|
val path = call.parameters["path"]
|
||||||
|
val streamedResource = javaClass.getResourceAsStream("/" + path!!)
|
||||||
|
|
||||||
|
println(path)
|
||||||
|
|
||||||
|
val extension = path.substring(path.lastIndexOf('.'))
|
||||||
|
|
||||||
|
val type = ContentType.defaultForFileExtension(extension)
|
||||||
|
|
||||||
|
println(type)
|
||||||
|
|
||||||
|
if (streamedResource != null) {
|
||||||
|
call.respondOutputStream(type, HttpStatusCode.OK) {
|
||||||
|
streamedResource.copyTo(this)
|
||||||
|
}
|
||||||
|
streamedResource.close()
|
||||||
|
} else {
|
||||||
|
call.respondText(type, HttpStatusCode.NotFound) { "No resource found" }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.start(true)
|
}.start(true)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,7 +83,7 @@ class OverviewTemplate(
|
|||||||
+squadListFaction.name
|
+squadListFaction.name
|
||||||
}
|
}
|
||||||
if (team.keys.isEmpty()) {
|
if (team.keys.isEmpty()) {
|
||||||
+"empty"
|
+"No people on this side."
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
team.forEach {
|
team.forEach {
|
||||||
@ -101,7 +101,7 @@ class OverviewTemplate(
|
|||||||
val teamB = players.players.filter { it.teamId == 2 }.groupBy { it.squadId }
|
val teamB = players.players.filter { it.teamId == 2 }.groupBy { it.squadId }
|
||||||
|
|
||||||
head {
|
head {
|
||||||
styleLink("/css")
|
styleLink("/resources/main.css")
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -115,5 +115,4 @@ class OverviewTemplate(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,7 +1,3 @@
|
|||||||
package yenon.squadcompanion
|
|
||||||
|
|
||||||
object Css {
|
|
||||||
val cssString = """
|
|
||||||
.teamView{
|
.teamView{
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -11,7 +7,8 @@ object Css {
|
|||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
padding: 6px;
|
padding: 8px;
|
||||||
|
padding-inline: 16px;
|
||||||
}
|
}
|
||||||
.colorBluFor{
|
.colorBluFor{
|
||||||
background-color: #bbffff;
|
background-color: #bbffff;
|
||||||
@ -50,6 +47,4 @@ object Css {
|
|||||||
}
|
}
|
||||||
tr:nth-child(even) {
|
tr:nth-child(even) {
|
||||||
background-color: rgba(0, 0, 0, 0.1);
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
}
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user