Resolved #10818 - Updating server URL allows checking connection immediately

This commit is contained in:
Yair Morgenstern 2023-12-30 20:49:36 +02:00
parent 869154cc73
commit bd1a3d4d2a
3 changed files with 18 additions and 24 deletions

View File

@ -11,14 +11,11 @@ import com.unciv.logic.multiplayer.storage.ApiV2FileStorageWrapper
import com.unciv.logic.multiplayer.storage.MultiplayerFileNotFoundException
import com.unciv.utils.Concurrency
import com.unciv.utils.Log
import io.ktor.client.call.body
import io.ktor.client.plugins.websocket.ClientWebSocketSession
import io.ktor.client.request.get
import io.ktor.http.isSuccess
import io.ktor.websocket.Frame
import io.ktor.websocket.FrameType
import io.ktor.websocket.close
import io.ktor.websocket.readText
import io.ktor.client.call.*
import io.ktor.client.plugins.websocket.*
import io.ktor.client.request.*
import io.ktor.http.*
import io.ktor.websocket.*
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
@ -35,6 +32,7 @@ import java.time.Instant
import java.util.Random
import java.util.UUID
import java.util.concurrent.atomic.AtomicReference
import kotlin.collections.set
/**
* Main class to interact with multiplayer servers implementing [ApiVersion.ApiV2]
@ -569,7 +567,7 @@ class ApiV2(private val baseUrl: String) : ApiV2Wrapper(baseUrl), Disposable {
}
val success = auth.login(
UncivGame.Current.settings.multiplayer.userName,
UncivGame.Current.settings.multiplayer.passwords[UncivGame.Current.onlineMultiplayer.multiplayerServer.serverUrl] ?: "",
UncivGame.Current.settings.multiplayer.passwords[UncivGame.Current.onlineMultiplayer.multiplayerServer.getServerUrl()] ?: "",
suppress = true
)
if (success) {

View File

@ -20,11 +20,11 @@ import com.unciv.logic.multiplayer.ServerFeatureSet
*/
@Suppress("RedundantSuspendModifier") // Methods can take a long time, so force users to use them in a coroutine to not get ANRs on Android
class OnlineMultiplayerServer(
fileStorageIdentifier: String? = null,
val fileStorageIdentifier: String? = null,
private var authenticationHeader: Map<String, String>? = null
) {
internal var featureSet = ServerFeatureSet()
val serverUrl = fileStorageIdentifier ?: UncivGame.Current.settings.multiplayer.server
fun getServerUrl() = fileStorageIdentifier ?: UncivGame.Current.settings.multiplayer.server
fun fileStorage(): FileStorage {
val authHeader = if (authenticationHeader == null) {
@ -32,9 +32,9 @@ class OnlineMultiplayerServer(
mapOf("Authorization" to settings.getAuthHeader())
} else authenticationHeader
return if (serverUrl == Constants.dropboxMultiplayerServer) DropBox
return if (getServerUrl() == Constants.dropboxMultiplayerServer) DropBox
else UncivServerFileStorage.apply {
serverUrl = this@OnlineMultiplayerServer.serverUrl
serverUrl = this@OnlineMultiplayerServer.getServerUrl()
this.authHeader = authHeader
}
}
@ -45,7 +45,7 @@ class OnlineMultiplayerServer(
*/
fun checkServerStatus(): Boolean {
var statusOk = false
SimpleHttp.sendGetRequest("${serverUrl}/isalive") { success, result, _ ->
SimpleHttp.sendGetRequest("${getServerUrl()}/isalive") { success, result, _ ->
statusOk = success
if (result.isNotEmpty()) {
featureSet = try {

View File

@ -17,11 +17,11 @@ import com.unciv.ui.components.extensions.addSeparator
import com.unciv.ui.components.extensions.brighten
import com.unciv.ui.components.extensions.format
import com.unciv.ui.components.extensions.isEnabled
import com.unciv.ui.components.input.onChange
import com.unciv.ui.components.input.onClick
import com.unciv.ui.components.extensions.toGdxArray
import com.unciv.ui.components.extensions.toLabel
import com.unciv.ui.components.extensions.toTextButton
import com.unciv.ui.components.input.onChange
import com.unciv.ui.components.input.onClick
import com.unciv.ui.popups.AuthPopup
import com.unciv.ui.popups.Popup
import com.unciv.ui.popups.options.SettingsSelect.SelectItem
@ -151,18 +151,14 @@ private fun addMultiplayerServerOptions(
multiplayerServerTextField.text = Gdx.app.clipboard.contents
}).colspan(2).row()
multiplayerServerTextField.onChange {
fixTextFieldUrlOnType(multiplayerServerTextField)
// we can't trim on 'fixTextFieldUrlOnType' for reasons
settings.multiplayer.server = multiplayerServerTextField.text.trimEnd('/')
val isCustomServer = OnlineMultiplayer.usesCustomServer()
connectionToServerButton.isEnabled = isCustomServer
for (refreshSelect in toUpdate) refreshSelect.update(isCustomServer)
if (isCustomServer) {
fixTextFieldUrlOnType(multiplayerServerTextField)
// we can't trim on 'fixTextFieldUrlOnType' for reasons
settings.multiplayer.server = multiplayerServerTextField.text.trimEnd('/')
} else {
settings.multiplayer.server = multiplayerServerTextField.text
}
}
serverIpTable.add(multiplayerServerTextField)