diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnection.kt index 53d3ce4f8..ee44a4a63 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnection.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.network.connection.status import de.bixilon.kutil.concurrent.pool.DefaultThreadPool +import de.bixilon.kutil.concurrent.time.TimeWorker import de.bixilon.kutil.watcher.DataWatcher.Companion.observe import de.bixilon.kutil.watcher.DataWatcher.Companion.watched import de.bixilon.minosoft.data.registries.versions.Version @@ -34,6 +35,7 @@ import de.bixilon.minosoft.util.DNSUtil import de.bixilon.minosoft.util.ServerAddress import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogMessageType +import java.util.concurrent.TimeoutException class StatusConnection( address: String, @@ -55,6 +57,7 @@ class StatusConnection( var state by watched(StatusConnectionStates.WAITING) + override var error: Throwable? get() = super.error set(value) { @@ -131,6 +134,16 @@ class StatusConnection( error = null state = StatusConnectionStates.RESOLVING + // timeout task + // ToDo: Cancel on success + TimeWorker.runIn(30000) { + if (state != StatusConnectionStates.PING_DONE) { + network.disconnect() + error = TimeoutException() + state = StatusConnectionStates.ERROR + } + } + DefaultThreadPool += execute@{ try { resolve() @@ -154,7 +167,7 @@ class StatusConnection( return super.registerEvent(invoker) } - super.registerEvent(invoker) + super.registerEvent(invoker) when { diff --git a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt index f5ba14d5e..f4724c84f 100644 --- a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt +++ b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.util.account.microsoft import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.time.TimeWorker -import de.bixilon.kutil.concurrent.time.TimeWorkerTask import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.time.TimeUtil import de.bixilon.minosoft.data.accounts.AccountStates @@ -65,7 +64,7 @@ object MicrosoftOAuthUtils { } if (response == null) { // no response yet - TimeWorker += TimeWorkerTask(deviceCode.interval * 1000, true) { checkToken() } + TimeWorker.runIn(deviceCode.interval * 1000) { checkToken() } return } Log.log(LogMessageType.AUTHENTICATION, LogLevels.INFO) { "Code (${deviceCode.userCode}) is valid, logging in..." }