Move SimpleHttp object (#6479)

* Change TabbedPager mechanism to communicate page activation

* Change TabbedPager mechanism for fixed content

* OptionsPopup better use of TabbedPager

* TabbedPager arrow keys

* After-merge patch

* Move SimpleHttp

Co-authored-by: Yair Morgenstern <yairm210@hotmail.com>
This commit is contained in:
SomeTroglodyte 2022-04-05 20:05:59 +02:00 committed by GitHub
parent 8385f814a6
commit a4babeda0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 63 deletions

View File

@ -7,7 +7,6 @@ import com.unciv.logic.GameInfo
import com.unciv.logic.GameInfoPreview import com.unciv.logic.GameInfoPreview
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.ui.saves.Gzip import com.unciv.ui.saves.Gzip
import com.unciv.ui.worldscreen.mainmenu.OptionsPopup
import java.util.* import java.util.*
interface IFileStorage { interface IFileStorage {
@ -25,7 +24,7 @@ interface IFileMetaData {
class UncivServerFileStorage(val serverUrl:String):IFileStorage { class UncivServerFileStorage(val serverUrl:String):IFileStorage {
override fun saveFileData(fileName: String, data: String) { override fun saveFileData(fileName: String, data: String) {
OptionsPopup.SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data){ SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data){
success: Boolean, result: String -> success: Boolean, result: String ->
if (!success) { if (!success) {
println(result) println(result)
@ -36,7 +35,7 @@ class UncivServerFileStorage(val serverUrl:String):IFileStorage {
override fun loadFileData(fileName: String): String { override fun loadFileData(fileName: String): String {
var fileData = "" var fileData = ""
OptionsPopup.SimpleHttp.sendGetRequest("$serverUrl/files/$fileName"){ SimpleHttp.sendGetRequest("$serverUrl/files/$fileName"){
success: Boolean, result: String -> success: Boolean, result: String ->
if (!success) { if (!success) {
println(result) println(result)
@ -52,7 +51,7 @@ class UncivServerFileStorage(val serverUrl:String):IFileStorage {
} }
override fun deleteFile(fileName: String) { override fun deleteFile(fileName: String) {
OptionsPopup.SimpleHttp.sendRequest(Net.HttpMethods.DELETE, "$serverUrl/files/$fileName", ""){ SimpleHttp.sendRequest(Net.HttpMethods.DELETE, "$serverUrl/files/$fileName", ""){
success: Boolean, result: String -> success: Boolean, result: String ->
if (!success) throw java.lang.Exception(result) if (!success) throw java.lang.Exception(result)
} }
@ -66,9 +65,9 @@ class OnlineMultiplayer {
val fileStorage: IFileStorage val fileStorage: IFileStorage
init { init {
val settings = UncivGame.Current.settings val settings = UncivGame.Current.settings
if (settings.multiplayerServer == Constants.dropboxMultiplayerServer) fileStorage = if (settings.multiplayerServer == Constants.dropboxMultiplayerServer)
fileStorage = DropboxFileStorage() DropboxFileStorage()
else fileStorage = UncivServerFileStorage(settings.multiplayerServer) else UncivServerFileStorage(settings.multiplayerServer)
} }
fun tryUploadGame(gameInfo: GameInfo, withPreview: Boolean) { fun tryUploadGame(gameInfo: GameInfo, withPreview: Boolean) {

View File

@ -0,0 +1,55 @@
package com.unciv.logic.multiplayer
import com.badlogic.gdx.Net
import java.io.BufferedReader
import java.io.DataOutputStream
import java.io.InputStreamReader
import java.net.DatagramSocket
import java.net.HttpURLConnection
import java.net.InetAddress
import java.net.URI
import java.nio.charset.Charset
object SimpleHttp {
fun sendGetRequest(url: String, action: (success: Boolean, result: String)->Unit) {
sendRequest(Net.HttpMethods.GET, url, "", action)
}
fun sendRequest(method: String, url: String, content: String, action: (success: Boolean, result: String)->Unit) {
var uri = URI(url)
if (uri.host == null) uri = URI("http://$url")
if (uri.port == -1) uri = URI(uri.scheme, uri.userInfo, uri.host, 8080, uri.path, uri.query, uri.fragment)
with(uri.toURL().openConnection() as HttpURLConnection) {
requestMethod = method // default is GET
try {
if (content.isNotEmpty()) {
doOutput = true
// StandardCharsets.UTF_8 requires API 19
val postData: ByteArray = content.toByteArray(Charset.forName("UTF-8"))
val outputStream = DataOutputStream(outputStream)
outputStream.write(postData)
outputStream.flush()
}
val text = BufferedReader(InputStreamReader(inputStream)).readText()
action(true, text)
} catch (t: Throwable) {
println(t.message)
val errorMessageToReturn =
if (errorStream != null) BufferedReader(InputStreamReader(errorStream)).readText()
else t.message!!
println(errorMessageToReturn)
action(false, errorMessageToReturn)
}
}
}
fun getIpAddress(): String? {
DatagramSocket().use { socket ->
socket.connect(InetAddress.getByName("8.8.8.8"), 10002)
return socket.localAddress.hostAddress
}
}
}

View File

@ -3,7 +3,6 @@ package com.unciv.ui.worldscreen.mainmenu
import com.badlogic.gdx.Application import com.badlogic.gdx.Application
import com.badlogic.gdx.Gdx import com.badlogic.gdx.Gdx
import com.badlogic.gdx.Input import com.badlogic.gdx.Input
import com.badlogic.gdx.Net
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox import com.badlogic.gdx.scenes.scene2d.ui.SelectBox
@ -15,6 +14,7 @@ import com.unciv.MainMenuScreen
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.MapSaver import com.unciv.logic.MapSaver
import com.unciv.logic.civilization.PlayerType import com.unciv.logic.civilization.PlayerType
import com.unciv.logic.multiplayer.SimpleHttp
import com.unciv.models.UncivSound import com.unciv.models.UncivSound
import com.unciv.models.metadata.BaseRuleset import com.unciv.models.metadata.BaseRuleset
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
@ -35,15 +35,7 @@ import com.unciv.ui.utils.*
import com.unciv.ui.utils.LanguageTable.Companion.addLanguageTables import com.unciv.ui.utils.LanguageTable.Companion.addLanguageTables
import com.unciv.ui.utils.UncivTooltip.Companion.addTooltip import com.unciv.ui.utils.UncivTooltip.Companion.addTooltip
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen
import java.io.BufferedReader import java.util.UUID
import java.io.DataOutputStream
import java.io.InputStreamReader
import java.net.DatagramSocket
import java.net.HttpURLConnection
import java.net.InetAddress
import java.net.URL
import java.nio.charset.Charset
import java.util.*
import kotlin.math.floor import kotlin.math.floor
import com.badlogic.gdx.utils.Array as GdxArray import com.badlogic.gdx.utils.Array as GdxArray
@ -133,6 +125,10 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) {
(previousScreen.game.screen as BaseScreen).openOptionsPopup() (previousScreen.game.screen as BaseScreen).openOptionsPopup()
} }
private fun successfullyConnectedToServer(action: (Boolean, String)->Unit){
SimpleHttp.sendGetRequest("${settings.multiplayerServer}/isalive", action)
}
//region Page builders //region Page builders
private fun getAboutTab(): Table { private fun getAboutTab(): Table {
@ -297,52 +293,6 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) {
}).row() }).row()
} }
fun getIpAddress(): String? {
DatagramSocket().use { socket ->
socket.connect(InetAddress.getByName("8.8.8.8"), 10002)
return socket.localAddress.hostAddress
}
}
object SimpleHttp {
fun sendGetRequest(url: String, action: (success: Boolean, result: String)->Unit) {
sendRequest(Net.HttpMethods.GET, url, "", action)
}
fun sendRequest(method: String, url: String, content: String, action: (success: Boolean, result: String)->Unit) {
with(URL(url).openConnection() as HttpURLConnection) {
requestMethod = method // default is GET
if (method != Net.HttpMethods.GET) doOutput = true
try {
if (content.isNotEmpty()) {
// StandardCharsets.UTF_8 requires API 19
val postData: ByteArray = content.toByteArray(Charset.forName("UTF-8"))
val outputStream = DataOutputStream(outputStream)
outputStream.write(postData)
outputStream.flush()
}
val text = BufferedReader(InputStreamReader(inputStream)).readText()
action(true, text)
} catch (t: Throwable) {
println(t.message)
val errorMessageToReturn =
if (errorStream != null) BufferedReader(InputStreamReader(errorStream)).readText()
else t.message!!
println(errorMessageToReturn)
action(false, errorMessageToReturn)
}
}
}
}
fun successfullyConnectedToServer(action: (Boolean, String)->Unit){
SimpleHttp.sendGetRequest("${settings.multiplayerServer}/isalive", action)
}
private fun getAdvancedTab() = Table(BaseScreen.skin).apply { private fun getAdvancedTab() = Table(BaseScreen.skin).apply {
pad(10f) pad(10f)
defaults().pad(5f) defaults().pad(5f)