TerraOceanPlugin/KotlinPlugin/src/main/kotlin/com/terraocean/plugin/bridge/WebSocket.kt

75 lines
2.2 KiB
Kotlin

2019-10-05 09:54:42 +07:00
package com.terraocean.plugin.bridge
import com.terraocean.plugin.Settings
import com.terraocean.plugin.Strings
2019-10-05 09:54:42 +07:00
import com.terraocean.plugin.instance
import hazae41.minecraft.kutils.bukkit.info
import hazae41.minecraft.kutils.bukkit.warning
import okhttp3.*
2019-10-05 09:54:42 +07:00
import org.bukkit.Bukkit
import java.util.concurrent.TimeUnit
2019-10-05 09:54:42 +07:00
val client = OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.build()
2019-10-05 09:54:42 +07:00
lateinit var socket: WebSocket
2019-10-05 09:54:42 +07:00
fun establishConnection() {
instance.info("establishing connection to ${Settings.socketURL}...")
val request = Request.Builder()
.url(Settings.socketURL)
.build()
socket = client.newWebSocket(request, WSListener())
2019-10-05 09:54:42 +07:00
}
fun processMessage(msg: List<String>) {
when (msg[0]) {
"leave" -> {
Bukkit.getPlayer(msg[1])?.kickPlayer(Strings.kickVoiceChannel)
2019-10-05 09:54:42 +07:00
}
"vote" -> {
Bukkit.getOnlinePlayers().forEach {
it.sendMessage(Strings.voteNew)
2019-10-05 09:54:42 +07:00
}
}
"votewarn" -> {
Bukkit.getPlayer(msg[1])?.sendMessage(Strings.voteWarn)
2019-10-05 09:54:42 +07:00
}
"votetimeout" -> {
Bukkit.getPlayer(msg[1])?.kickPlayer(Strings.voteTimeout)
2019-10-05 09:54:42 +07:00
}
"kick" -> {
Bukkit.getPlayer(msg[1])?.kickPlayer(Strings.voteKick)
2019-10-05 09:54:42 +07:00
}
"whitelistadd" -> {
instance.server.run {
2019-10-05 09:54:42 +07:00
getOfflinePlayer(msg[1]).isWhitelisted = true
}
}
"whitelistremove" -> {
instance.server.run {
getPlayer(msg[1])?.kickPlayer(Strings.kickRemovedFromWhitelist)
2019-10-05 09:54:42 +07:00
getOfflinePlayer(msg[1]).isWhitelisted = false
}
}
else -> instance.warning(
2019-10-05 09:54:42 +07:00
"Potentially out of date plugin. Unknown message: " + msg.joinToString(" ")
)
}
}
class WSListener: WebSocketListener() {
override fun onMessage(webSocket: WebSocket, text: String) {
processMessage(text.split(' '))
}
override fun onOpen(webSocket: WebSocket, response: Response) {
instance.info("Socket connection established to $response.")
}
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
TODO("Automatic reconnection")
}
}