From d5fd7328c7b4500eeb9a6b1c94e69c6fc398a53c Mon Sep 17 00:00:00 2001 From: Nikky Ai Date: Wed, 21 Feb 2018 05:52:01 +0100 Subject: [PATCH] improve update check and add handleTick --- .../main/kotlin/matterlink/EventHandler.kt | 7 ++--- .../main/kotlin/matterlink/EventHandler.kt | 2 +- .../main/kotlin/matterlink/EventHandler.kt | 2 +- .../main/kotlin/matterlink/EventHandler.kt | 7 ++--- .../src/main/kotlin/matterlink/IMatterLink.kt | 12 ++------ .../matterlink/bridge/MessageHandler.kt | 10 +++---- .../matterlink/bridge/ServerChatHandler.kt | 3 +- .../kotlin/matterlink/handlers/TickHandler.kt | 30 +++++++++++++++++++ .../kotlin/matterlink/update/UpdateChecker.kt | 15 ++++++++-- 9 files changed, 56 insertions(+), 32 deletions(-) create mode 100644 core/src/main/kotlin/matterlink/handlers/TickHandler.kt diff --git a/1.10.2/src/main/kotlin/matterlink/EventHandler.kt b/1.10.2/src/main/kotlin/matterlink/EventHandler.kt index 0523b66..ffd2be3 100644 --- a/1.10.2/src/main/kotlin/matterlink/EventHandler.kt +++ b/1.10.2/src/main/kotlin/matterlink/EventHandler.kt @@ -3,10 +3,7 @@ package matterlink import matterlink.bridge.ServerChatHandler import matterlink.bridge.USER_ACTION import matterlink.config.cfg -import matterlink.handlers.ChatProcessor -import matterlink.handlers.DeathHandler -import matterlink.handlers.JoinLeaveHandler -import matterlink.handlers.ProgressHandler +import matterlink.handlers.* import net.minecraft.command.server.CommandBroadcast import net.minecraft.command.server.CommandEmote import net.minecraft.entity.player.EntityPlayer @@ -106,6 +103,6 @@ object EventHandler { @SubscribeEvent @JvmStatic fun serverTickEvent(e: TickEvent.ServerTickEvent) { - ServerChatHandler.writeIncomingToChat(FMLCommonHandler.instance().minecraftServerInstance.tickCounter) + TickHandler.handleTick() } } \ No newline at end of file diff --git a/1.11.2/src/main/kotlin/matterlink/EventHandler.kt b/1.11.2/src/main/kotlin/matterlink/EventHandler.kt index 1bd9a0f..68a1065 100644 --- a/1.11.2/src/main/kotlin/matterlink/EventHandler.kt +++ b/1.11.2/src/main/kotlin/matterlink/EventHandler.kt @@ -104,6 +104,6 @@ object EventHandler { @SubscribeEvent @JvmStatic fun serverTickEvent(e: TickEvent.ServerTickEvent) { - ServerChatHandler.writeIncomingToChat(FMLCommonHandler.instance().minecraftServerInstance.tickCounter) + TickHandler.handleTick() } } \ No newline at end of file diff --git a/1.12.2/src/main/kotlin/matterlink/EventHandler.kt b/1.12.2/src/main/kotlin/matterlink/EventHandler.kt index 2d1608c..eddb396 100644 --- a/1.12.2/src/main/kotlin/matterlink/EventHandler.kt +++ b/1.12.2/src/main/kotlin/matterlink/EventHandler.kt @@ -96,6 +96,6 @@ object EventHandler { @SubscribeEvent @JvmStatic fun serverTickEvent(e: TickEvent.ServerTickEvent) { - ServerChatHandler.writeIncomingToChat(FMLCommonHandler.instance().minecraftServerInstance.tickCounter) + TickHandler.handleTick() } } \ No newline at end of file diff --git a/1.7.10/src/main/kotlin/matterlink/EventHandler.kt b/1.7.10/src/main/kotlin/matterlink/EventHandler.kt index b099e96..e710159 100644 --- a/1.7.10/src/main/kotlin/matterlink/EventHandler.kt +++ b/1.7.10/src/main/kotlin/matterlink/EventHandler.kt @@ -6,10 +6,7 @@ import cpw.mods.fml.common.gameevent.TickEvent import matterlink.bridge.ServerChatHandler import matterlink.bridge.USER_ACTION import matterlink.config.cfg -import matterlink.handlers.ChatProcessor -import matterlink.handlers.DeathHandler -import matterlink.handlers.JoinLeaveHandler -import matterlink.handlers.ProgressHandler +import matterlink.handlers.* import net.minecraft.command.server.CommandBroadcast import net.minecraft.command.server.CommandEmote import net.minecraft.entity.player.EntityPlayer @@ -99,6 +96,6 @@ object EventHandler { //FORGE-DEPENDENT @SubscribeEvent fun serverTickEvent(e: TickEvent.ServerTickEvent) { - ServerChatHandler.writeIncomingToChat(MinecraftServer.getServer().tickCounter) + TickHandler.handleTick(MinecraftServer.getServer().tickCounter) } } \ No newline at end of file diff --git a/core/src/main/kotlin/matterlink/IMatterLink.kt b/core/src/main/kotlin/matterlink/IMatterLink.kt index af853e1..2bc432f 100644 --- a/core/src/main/kotlin/matterlink/IMatterLink.kt +++ b/core/src/main/kotlin/matterlink/IMatterLink.kt @@ -20,10 +20,8 @@ abstract class IMatterLink { fun start() { serverStartTime = System.currentTimeMillis() MessageHandler.start(clear = true, firstRun = true, message = "Server started, connecting to matterbridge API") - if (cfg.update.enable) { - Thread(UpdateChecker()).start() - } + UpdateChecker.run() } fun stop() { @@ -49,14 +47,10 @@ abstract class IMatterLink { /** * in milliseconds */ - var serverStartTime: Long = 0 - - fun getUptimeInSeconds(): Long { - return (System.currentTimeMillis() - serverStartTime) / 1000 - } + var serverStartTime: Long = System.currentTimeMillis() fun getUptimeAsString(): String { - val total = this.getUptimeInSeconds() + val total = (System.currentTimeMillis() - serverStartTime) / 1000 val s = total % 60 val m = (total / 60) % 60 val h = (total / 3600) % 24 diff --git a/core/src/main/kotlin/matterlink/bridge/MessageHandler.kt b/core/src/main/kotlin/matterlink/bridge/MessageHandler.kt index 6a3d70c..eb62f2b 100644 --- a/core/src/main/kotlin/matterlink/bridge/MessageHandler.kt +++ b/core/src/main/kotlin/matterlink/bridge/MessageHandler.kt @@ -10,19 +10,19 @@ import java.io.IOException import java.util.concurrent.ConcurrentLinkedQueue object MessageHandler { + var enabled: Boolean = false private var sendErrors = 0 var connectErrors = 0 private var streamConnection: HttpStreamConnection var rcvQueue = ConcurrentLinkedQueue() private set + val connected get() = streamConnection.connected init { //initialized here so we can make sure rcvQueue is never null streamConnection = createThread() } - val connected get() = streamConnection.connected - private fun createThread(clear: Boolean = true): HttpStreamConnection { return HttpStreamConnection( rcvQueue, @@ -48,8 +48,6 @@ object MessageHandler { streamConnection.close() } - var enabled: Boolean = false - fun start(message: String?, clear: Boolean = true, firstRun: Boolean = false) { enabled = when { firstRun -> cfg.connect.autoConnect @@ -102,8 +100,8 @@ object MessageHandler { } } - fun checkConnection(tick: Int) { - if (enabled && tick % 20 == 0 && !streamConnection.connected && !streamConnection.connecting) { + fun checkConnection() { + if (enabled && !streamConnection.connected && !streamConnection.connecting) { if (connectErrors > 5) { instance.fatal("Caught too many errors, closing bridge") diff --git a/core/src/main/kotlin/matterlink/bridge/ServerChatHandler.kt b/core/src/main/kotlin/matterlink/bridge/ServerChatHandler.kt index c7e4f1d..f581ff5 100644 --- a/core/src/main/kotlin/matterlink/bridge/ServerChatHandler.kt +++ b/core/src/main/kotlin/matterlink/bridge/ServerChatHandler.kt @@ -9,8 +9,7 @@ object ServerChatHandler { /** * This method must be called every server tick with no arguments. */ - fun writeIncomingToChat(tick: Int) { - MessageHandler.checkConnection(tick) + fun writeIncomingToChat() { if (MessageHandler.rcvQueue.isNotEmpty()) instance.debug("incoming: " + MessageHandler.rcvQueue.toString()) val nextMessage = MessageHandler.rcvQueue.poll() diff --git a/core/src/main/kotlin/matterlink/handlers/TickHandler.kt b/core/src/main/kotlin/matterlink/handlers/TickHandler.kt new file mode 100644 index 0000000..d6bb7f2 --- /dev/null +++ b/core/src/main/kotlin/matterlink/handlers/TickHandler.kt @@ -0,0 +1,30 @@ +package matterlink.handlers + +import matterlink.bridge.MessageHandler +import matterlink.bridge.ServerChatHandler +import matterlink.update.UpdateChecker + +/** + * Created by nikky on 21/02/18. + * @author Nikky + * @version 1.0 + */ +object TickHandler { + private var totalTicks = 0 + private var accumulator = 0 + private const val updateInterval = 12 * 60 * 20 + fun handleTick() { + totalTicks++ + if (totalTicks % 20 == 0) { + MessageHandler.checkConnection() + } + + ServerChatHandler.writeIncomingToChat() + + + if(accumulator++ > updateInterval) { + accumulator -= updateInterval + UpdateChecker.run() + } + } +} \ No newline at end of file diff --git a/core/src/main/kotlin/matterlink/update/UpdateChecker.kt b/core/src/main/kotlin/matterlink/update/UpdateChecker.kt index f0e7653..1fd8116 100644 --- a/core/src/main/kotlin/matterlink/update/UpdateChecker.kt +++ b/core/src/main/kotlin/matterlink/update/UpdateChecker.kt @@ -1,8 +1,6 @@ package matterlink.update import com.google.gson.Gson -import matterlink.bridge.ApiMessage -import matterlink.bridge.MessageHandler import matterlink.config.cfg import matterlink.instance import org.apache.http.HttpResponse @@ -11,7 +9,18 @@ import org.apache.http.client.methods.HttpGet import org.apache.http.impl.client.HttpClients import java.io.BufferedReader -class UpdateChecker : Runnable { +class UpdateChecker : Thread() { + companion object { + fun run() { + if (cfg.update.enable) { + UpdateChecker().start() + } + } + } + + init { + name = "UpdateCheckerThread" + } override fun run() { if (instance.modVersion.contains("-build")) {