diff --git a/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt b/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt index 11ff73e1ce..c105d697cc 100644 --- a/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt +++ b/core/src/com/unciv/logic/multiplayer/storage/SimpleHttp.kt @@ -8,25 +8,28 @@ import java.io.InputStreamReader import java.net.* import java.nio.charset.Charset +private typealias SendRequestCallback = (success: Boolean, result: String, code: Int?)->Unit + object SimpleHttp { - fun sendGetRequest(url: String, action: (success: Boolean, result: String, code: Int?)->Unit) { - sendRequest(Net.HttpMethods.GET, url, "", action) + fun sendGetRequest(url: String, timeout: Int = 5000, action: SendRequestCallback) { + sendRequest(Net.HttpMethods.GET, url, "", timeout, action) } - fun sendRequest(method: String, url: String, content: String, action: (success: Boolean, result: String, code: Int?)->Unit) { + fun sendRequest(method: String, url: String, content: String, timeout: Int = 5000, action: SendRequestCallback) { var uri = URI(url) if (uri.host == null) uri = URI("http://$url") val urlObj: URL try { urlObj = uri.toURL() - } catch (t:Throwable){ + } catch (t: Throwable) { action(false, "Bad URL", null) return } - + with(urlObj.openConnection() as HttpURLConnection) { requestMethod = method // default is GET + connectTimeout = timeout if (UncivGame.isCurrentInitialized()) setRequestProperty("User-Agent", "Unciv/${UncivGame.Current.version}-GNU-Terry-Pratchett") else diff --git a/core/src/com/unciv/logic/multiplayer/storage/UncivServerFileStorage.kt b/core/src/com/unciv/logic/multiplayer/storage/UncivServerFileStorage.kt index b77cf01f86..4dc4f664fd 100644 --- a/core/src/com/unciv/logic/multiplayer/storage/UncivServerFileStorage.kt +++ b/core/src/com/unciv/logic/multiplayer/storage/UncivServerFileStorage.kt @@ -4,10 +4,10 @@ import com.badlogic.gdx.Net import java.io.FileNotFoundException import java.lang.Exception -class UncivServerFileStorage(val serverUrl:String): FileStorage { +class UncivServerFileStorage(val serverUrl: String, val timeout: Int = 30000) : FileStorage { override fun saveFileData(fileName: String, data: String, overwrite: Boolean) { - SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data) { - success, result, code -> + SimpleHttp.sendRequest(Net.HttpMethods.PUT, fileUrl(fileName), data, timeout) { + success, result, _ -> if (!success) { println(result) throw Exception(result) @@ -17,7 +17,7 @@ class UncivServerFileStorage(val serverUrl:String): FileStorage { override fun loadFileData(fileName: String): String { var fileData = "" - SimpleHttp.sendGetRequest("$serverUrl/files/$fileName"){ + SimpleHttp.sendGetRequest(fileUrl(fileName), timeout = timeout){ success, result, code -> if (!success) { println(result) @@ -37,7 +37,7 @@ class UncivServerFileStorage(val serverUrl:String): FileStorage { } override fun deleteFile(fileName: String) { - SimpleHttp.sendRequest(Net.HttpMethods.DELETE, "$serverUrl/files/$fileName", "") { + SimpleHttp.sendRequest(Net.HttpMethods.DELETE, fileUrl(fileName), "", timeout) { success, result, code -> if (!success) { when (code) { @@ -48,4 +48,5 @@ class UncivServerFileStorage(val serverUrl:String): FileStorage { } } + private fun fileUrl(fileName: String) = "$serverUrl/files/$fileName" } diff --git a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt index 4284ba4b00..c378e8137d 100644 --- a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt @@ -137,8 +137,15 @@ class OptionsPopup( (previousScreen.game.screen as BaseScreen).openOptionsPopup(tabs.activePage) } - private fun successfullyConnectedToServer(action: (Boolean, String, Int?) -> Unit){ - SimpleHttp.sendGetRequest("${settings.multiplayerServer}/isalive", action) + private fun successfullyConnectedToServer(action: (Boolean) -> Unit) { + launchCrashHandling("TestIsAlive") { + SimpleHttp.sendGetRequest("${settings.multiplayerServer}/isalive") { + success, _, _ -> + postCrashHandlingRunnable { + action(success) + } + } + } } //region Page builders @@ -307,7 +314,7 @@ class OptionsPopup( } popup.open(true) - successfullyConnectedToServer { success, _, _ -> + successfullyConnectedToServer { success -> popup.addGoodSizedLabel(if (success) "Success!" else "Failed!").row() popup.addCloseButton() }