improve update check and add handleTick

This commit is contained in:
Nikky Ai 2018-02-21 05:52:01 +01:00
parent f6b48085b0
commit d5fd7328c7
9 changed files with 56 additions and 32 deletions

View File

@ -3,10 +3,7 @@ package matterlink
import matterlink.bridge.ServerChatHandler import matterlink.bridge.ServerChatHandler
import matterlink.bridge.USER_ACTION import matterlink.bridge.USER_ACTION
import matterlink.config.cfg import matterlink.config.cfg
import matterlink.handlers.ChatProcessor import matterlink.handlers.*
import matterlink.handlers.DeathHandler
import matterlink.handlers.JoinLeaveHandler
import matterlink.handlers.ProgressHandler
import net.minecraft.command.server.CommandBroadcast import net.minecraft.command.server.CommandBroadcast
import net.minecraft.command.server.CommandEmote import net.minecraft.command.server.CommandEmote
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
@ -106,6 +103,6 @@ object EventHandler {
@SubscribeEvent @SubscribeEvent
@JvmStatic @JvmStatic
fun serverTickEvent(e: TickEvent.ServerTickEvent) { fun serverTickEvent(e: TickEvent.ServerTickEvent) {
ServerChatHandler.writeIncomingToChat(FMLCommonHandler.instance().minecraftServerInstance.tickCounter) TickHandler.handleTick()
} }
} }

View File

@ -104,6 +104,6 @@ object EventHandler {
@SubscribeEvent @SubscribeEvent
@JvmStatic @JvmStatic
fun serverTickEvent(e: TickEvent.ServerTickEvent) { fun serverTickEvent(e: TickEvent.ServerTickEvent) {
ServerChatHandler.writeIncomingToChat(FMLCommonHandler.instance().minecraftServerInstance.tickCounter) TickHandler.handleTick()
} }
} }

View File

@ -96,6 +96,6 @@ object EventHandler {
@SubscribeEvent @SubscribeEvent
@JvmStatic @JvmStatic
fun serverTickEvent(e: TickEvent.ServerTickEvent) { fun serverTickEvent(e: TickEvent.ServerTickEvent) {
ServerChatHandler.writeIncomingToChat(FMLCommonHandler.instance().minecraftServerInstance.tickCounter) TickHandler.handleTick()
} }
} }

View File

@ -6,10 +6,7 @@ import cpw.mods.fml.common.gameevent.TickEvent
import matterlink.bridge.ServerChatHandler import matterlink.bridge.ServerChatHandler
import matterlink.bridge.USER_ACTION import matterlink.bridge.USER_ACTION
import matterlink.config.cfg import matterlink.config.cfg
import matterlink.handlers.ChatProcessor import matterlink.handlers.*
import matterlink.handlers.DeathHandler
import matterlink.handlers.JoinLeaveHandler
import matterlink.handlers.ProgressHandler
import net.minecraft.command.server.CommandBroadcast import net.minecraft.command.server.CommandBroadcast
import net.minecraft.command.server.CommandEmote import net.minecraft.command.server.CommandEmote
import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayer
@ -99,6 +96,6 @@ object EventHandler {
//FORGE-DEPENDENT //FORGE-DEPENDENT
@SubscribeEvent @SubscribeEvent
fun serverTickEvent(e: TickEvent.ServerTickEvent) { fun serverTickEvent(e: TickEvent.ServerTickEvent) {
ServerChatHandler.writeIncomingToChat(MinecraftServer.getServer().tickCounter) TickHandler.handleTick(MinecraftServer.getServer().tickCounter)
} }
} }

View File

@ -20,10 +20,8 @@ abstract class IMatterLink {
fun start() { fun start() {
serverStartTime = System.currentTimeMillis() serverStartTime = System.currentTimeMillis()
MessageHandler.start(clear = true, firstRun = true, message = "Server started, connecting to matterbridge API") MessageHandler.start(clear = true, firstRun = true, message = "Server started, connecting to matterbridge API")
if (cfg.update.enable) {
Thread(UpdateChecker()).start()
}
UpdateChecker.run()
} }
fun stop() { fun stop() {
@ -49,14 +47,10 @@ abstract class IMatterLink {
/** /**
* in milliseconds * in milliseconds
*/ */
var serverStartTime: Long = 0 var serverStartTime: Long = System.currentTimeMillis()
fun getUptimeInSeconds(): Long {
return (System.currentTimeMillis() - serverStartTime) / 1000
}
fun getUptimeAsString(): String { fun getUptimeAsString(): String {
val total = this.getUptimeInSeconds() val total = (System.currentTimeMillis() - serverStartTime) / 1000
val s = total % 60 val s = total % 60
val m = (total / 60) % 60 val m = (total / 60) % 60
val h = (total / 3600) % 24 val h = (total / 3600) % 24

View File

@ -10,19 +10,19 @@ import java.io.IOException
import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.ConcurrentLinkedQueue
object MessageHandler { object MessageHandler {
var enabled: Boolean = false
private var sendErrors = 0 private var sendErrors = 0
var connectErrors = 0 var connectErrors = 0
private var streamConnection: HttpStreamConnection private var streamConnection: HttpStreamConnection
var rcvQueue = ConcurrentLinkedQueue<ApiMessage>() var rcvQueue = ConcurrentLinkedQueue<ApiMessage>()
private set private set
val connected get() = streamConnection.connected
init { init {
//initialized here so we can make sure rcvQueue is never null //initialized here so we can make sure rcvQueue is never null
streamConnection = createThread() streamConnection = createThread()
} }
val connected get() = streamConnection.connected
private fun createThread(clear: Boolean = true): HttpStreamConnection { private fun createThread(clear: Boolean = true): HttpStreamConnection {
return HttpStreamConnection( return HttpStreamConnection(
rcvQueue, rcvQueue,
@ -48,8 +48,6 @@ object MessageHandler {
streamConnection.close() streamConnection.close()
} }
var enabled: Boolean = false
fun start(message: String?, clear: Boolean = true, firstRun: Boolean = false) { fun start(message: String?, clear: Boolean = true, firstRun: Boolean = false) {
enabled = when { enabled = when {
firstRun -> cfg.connect.autoConnect firstRun -> cfg.connect.autoConnect
@ -102,8 +100,8 @@ object MessageHandler {
} }
} }
fun checkConnection(tick: Int) { fun checkConnection() {
if (enabled && tick % 20 == 0 && !streamConnection.connected && !streamConnection.connecting) { if (enabled && !streamConnection.connected && !streamConnection.connecting) {
if (connectErrors > 5) { if (connectErrors > 5) {
instance.fatal("Caught too many errors, closing bridge") instance.fatal("Caught too many errors, closing bridge")

View File

@ -9,8 +9,7 @@ object ServerChatHandler {
/** /**
* This method must be called every server tick with no arguments. * This method must be called every server tick with no arguments.
*/ */
fun writeIncomingToChat(tick: Int) { fun writeIncomingToChat() {
MessageHandler.checkConnection(tick)
if (MessageHandler.rcvQueue.isNotEmpty()) if (MessageHandler.rcvQueue.isNotEmpty())
instance.debug("incoming: " + MessageHandler.rcvQueue.toString()) instance.debug("incoming: " + MessageHandler.rcvQueue.toString())
val nextMessage = MessageHandler.rcvQueue.poll() val nextMessage = MessageHandler.rcvQueue.poll()

View File

@ -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()
}
}
}

View File

@ -1,8 +1,6 @@
package matterlink.update package matterlink.update
import com.google.gson.Gson import com.google.gson.Gson
import matterlink.bridge.ApiMessage
import matterlink.bridge.MessageHandler
import matterlink.config.cfg import matterlink.config.cfg
import matterlink.instance import matterlink.instance
import org.apache.http.HttpResponse import org.apache.http.HttpResponse
@ -11,7 +9,18 @@ import org.apache.http.client.methods.HttpGet
import org.apache.http.impl.client.HttpClients import org.apache.http.impl.client.HttpClients
import java.io.BufferedReader 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() { override fun run() {
if (instance.modVersion.contains("-build")) { if (instance.modVersion.contains("-build")) {