SimpleHttp gets a connection timeout (#6812)

* SimpleHttp gets a connection timeout
This commit is contained in:
SomeTroglodyte 2022-05-19 14:30:31 +02:00 committed by GitHub
parent 1126a7c996
commit 0ced4d96e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 13 deletions

View File

@ -8,25 +8,28 @@ import java.io.InputStreamReader
import java.net.* import java.net.*
import java.nio.charset.Charset import java.nio.charset.Charset
private typealias SendRequestCallback = (success: Boolean, result: String, code: Int?)->Unit
object SimpleHttp { object SimpleHttp {
fun sendGetRequest(url: String, action: (success: Boolean, result: String, code: Int?)->Unit) { fun sendGetRequest(url: String, timeout: Int = 5000, action: SendRequestCallback) {
sendRequest(Net.HttpMethods.GET, url, "", action) 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) var uri = URI(url)
if (uri.host == null) uri = URI("http://$url") if (uri.host == null) uri = URI("http://$url")
val urlObj: URL val urlObj: URL
try { try {
urlObj = uri.toURL() urlObj = uri.toURL()
} catch (t:Throwable){ } catch (t: Throwable) {
action(false, "Bad URL", null) action(false, "Bad URL", null)
return return
} }
with(urlObj.openConnection() as HttpURLConnection) { with(urlObj.openConnection() as HttpURLConnection) {
requestMethod = method // default is GET requestMethod = method // default is GET
connectTimeout = timeout
if (UncivGame.isCurrentInitialized()) if (UncivGame.isCurrentInitialized())
setRequestProperty("User-Agent", "Unciv/${UncivGame.Current.version}-GNU-Terry-Pratchett") setRequestProperty("User-Agent", "Unciv/${UncivGame.Current.version}-GNU-Terry-Pratchett")
else else

View File

@ -4,10 +4,10 @@ import com.badlogic.gdx.Net
import java.io.FileNotFoundException import java.io.FileNotFoundException
import java.lang.Exception 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) { override fun saveFileData(fileName: String, data: String, overwrite: Boolean) {
SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data) { SimpleHttp.sendRequest(Net.HttpMethods.PUT, fileUrl(fileName), data, timeout) {
success, result, code -> success, result, _ ->
if (!success) { if (!success) {
println(result) println(result)
throw Exception(result) throw Exception(result)
@ -17,7 +17,7 @@ class UncivServerFileStorage(val serverUrl:String): FileStorage {
override fun loadFileData(fileName: String): String { override fun loadFileData(fileName: String): String {
var fileData = "" var fileData = ""
SimpleHttp.sendGetRequest("$serverUrl/files/$fileName"){ SimpleHttp.sendGetRequest(fileUrl(fileName), timeout = timeout){
success, result, code -> success, result, code ->
if (!success) { if (!success) {
println(result) println(result)
@ -37,7 +37,7 @@ class UncivServerFileStorage(val serverUrl:String): FileStorage {
} }
override fun deleteFile(fileName: String) { override fun deleteFile(fileName: String) {
SimpleHttp.sendRequest(Net.HttpMethods.DELETE, "$serverUrl/files/$fileName", "") { SimpleHttp.sendRequest(Net.HttpMethods.DELETE, fileUrl(fileName), "", timeout) {
success, result, code -> success, result, code ->
if (!success) { if (!success) {
when (code) { when (code) {
@ -48,4 +48,5 @@ class UncivServerFileStorage(val serverUrl:String): FileStorage {
} }
} }
private fun fileUrl(fileName: String) = "$serverUrl/files/$fileName"
} }

View File

@ -137,8 +137,15 @@ class OptionsPopup(
(previousScreen.game.screen as BaseScreen).openOptionsPopup(tabs.activePage) (previousScreen.game.screen as BaseScreen).openOptionsPopup(tabs.activePage)
} }
private fun successfullyConnectedToServer(action: (Boolean, String, Int?) -> Unit){ private fun successfullyConnectedToServer(action: (Boolean) -> Unit) {
SimpleHttp.sendGetRequest("${settings.multiplayerServer}/isalive", action) launchCrashHandling("TestIsAlive") {
SimpleHttp.sendGetRequest("${settings.multiplayerServer}/isalive") {
success, _, _ ->
postCrashHandlingRunnable {
action(success)
}
}
}
} }
//region Page builders //region Page builders
@ -307,7 +314,7 @@ class OptionsPopup(
} }
popup.open(true) popup.open(true)
successfullyConnectedToServer { success, _, _ -> successfullyConnectedToServer { success ->
popup.addGoodSizedLabel(if (success) "Success!" else "Failed!").row() popup.addGoodSizedLabel(if (success) "Success!" else "Failed!").row()
popup.addCloseButton() popup.addCloseButton()
} }