2019-10-05 09:54:42 +07:00
|
|
|
package com.terraocean.plugin.bridge
|
|
|
|
|
2019-10-12 04:56:25 +07:00
|
|
|
import com.terraocean.plugin.Settings
|
|
|
|
import com.terraocean.plugin.Strings
|
2019-10-05 09:54:42 +07:00
|
|
|
import com.terraocean.plugin.instance
|
2019-10-12 04:56:25 +07:00
|
|
|
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
|
2019-10-12 04:56:25 +07:00
|
|
|
import java.util.concurrent.TimeUnit
|
2019-10-05 09:54:42 +07:00
|
|
|
|
2019-10-12 04:56:25 +07:00
|
|
|
val client = OkHttpClient.Builder()
|
|
|
|
.readTimeout(0, TimeUnit.MILLISECONDS)
|
|
|
|
.build()
|
2019-10-05 09:54:42 +07:00
|
|
|
|
2019-10-12 04:56:25 +07:00
|
|
|
lateinit var socket: WebSocket
|
2019-10-05 09:54:42 +07:00
|
|
|
|
2019-10-12 04:56:25 +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" -> {
|
2019-10-12 04:56:25 +07:00
|
|
|
Bukkit.getPlayer(msg[1])?.kickPlayer(Strings.kickVoiceChannel)
|
2019-10-05 09:54:42 +07:00
|
|
|
}
|
|
|
|
"vote" -> {
|
2019-10-12 04:56:25 +07:00
|
|
|
Bukkit.getOnlinePlayers().forEach {
|
|
|
|
it.sendMessage(Strings.voteNew)
|
2019-10-05 09:54:42 +07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
"votewarn" -> {
|
2019-10-12 04:56:25 +07:00
|
|
|
Bukkit.getPlayer(msg[1])?.sendMessage(Strings.voteWarn)
|
2019-10-05 09:54:42 +07:00
|
|
|
}
|
|
|
|
"votetimeout" -> {
|
2019-10-12 04:56:25 +07:00
|
|
|
Bukkit.getPlayer(msg[1])?.kickPlayer(Strings.voteTimeout)
|
2019-10-05 09:54:42 +07:00
|
|
|
}
|
|
|
|
"kick" -> {
|
2019-10-12 04:56:25 +07:00
|
|
|
Bukkit.getPlayer(msg[1])?.kickPlayer(Strings.voteKick)
|
2019-10-05 09:54:42 +07:00
|
|
|
}
|
|
|
|
"whitelistadd" -> {
|
2019-10-12 04:56:25 +07:00
|
|
|
instance.server.run {
|
2019-10-05 09:54:42 +07:00
|
|
|
getOfflinePlayer(msg[1]).isWhitelisted = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"whitelistremove" -> {
|
|
|
|
instance.server.run {
|
2019-10-12 04:56:25 +07:00
|
|
|
getPlayer(msg[1])?.kickPlayer(Strings.kickRemovedFromWhitelist)
|
2019-10-05 09:54:42 +07:00
|
|
|
getOfflinePlayer(msg[1]).isWhitelisted = false
|
|
|
|
}
|
|
|
|
}
|
2019-10-12 04:56:25 +07:00
|
|
|
else -> instance.warning(
|
2019-10-05 09:54:42 +07:00
|
|
|
"Potentially out of date plugin. Unknown message: " + msg.joinToString(" ")
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
2019-10-12 04:56:25 +07:00
|
|
|
|
|
|
|
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")
|
|
|
|
}
|
|
|
|
}
|