diff --git a/core/src/com/unciv/logic/multiplayer/Multiplayer.kt b/core/src/com/unciv/logic/multiplayer/Multiplayer.kt index 15f9f30be1..c058b4d145 100644 --- a/core/src/com/unciv/logic/multiplayer/Multiplayer.kt +++ b/core/src/com/unciv/logic/multiplayer/Multiplayer.kt @@ -1,12 +1,12 @@ package com.unciv.logic.multiplayer -import com.badlogic.gdx.Gdx import com.badlogic.gdx.Net import com.unciv.Constants import com.unciv.UncivGame import com.unciv.logic.GameInfo import com.unciv.logic.GameInfoPreview import com.unciv.logic.GameSaver +import com.unciv.models.metadata.checkMultiplayerServerWithPort import com.unciv.ui.saves.Gzip import com.unciv.ui.worldscreen.mainmenu.OptionsPopup import java.util.* @@ -24,11 +24,11 @@ interface IFileMetaData { -class UncivServerFileStorage(val serverIp:String):IFileStorage { - val serverUrl = "http://$serverIp:8080" +class UncivServerFileStorage(serverIpWithPort:String):IFileStorage { + val serverUrl = "http://$serverIpWithPort" override fun saveFileData(fileName: String, data: String) { OptionsPopup.SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data){ - success: Boolean, result: String -> + success: Boolean, result: String -> if (!success) { println(result) throw java.lang.Exception(result) @@ -70,7 +70,10 @@ class OnlineMultiplayer { val settings = UncivGame.Current.settings if (settings.multiplayerServer == Constants.dropboxMultiplayerServer) fileStorage = DropboxFileStorage() - else fileStorage = UncivServerFileStorage(settings.multiplayerServer) + else { + val serverIpWithPort = settings.multiplayerServer.checkMultiplayerServerWithPort() + fileStorage = UncivServerFileStorage(serverIpWithPort) + } } fun tryUploadGame(gameInfo: GameInfo, withPreview: Boolean) { diff --git a/core/src/com/unciv/models/metadata/ExtensionFunctions.kt b/core/src/com/unciv/models/metadata/ExtensionFunctions.kt new file mode 100644 index 0000000000..bcdf8bea0b --- /dev/null +++ b/core/src/com/unciv/models/metadata/ExtensionFunctions.kt @@ -0,0 +1,7 @@ +package com.unciv.models.metadata + +/** Check the url, if no port, add [defaultPort], then return the url. */ +fun String.checkMultiplayerServerWithPort(defaultPort: Int = 8080): String { + return if (contains(":")) this + else "$this:$defaultPort" +} \ No newline at end of file diff --git a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt index 86d9892eed..5d9b9218df 100644 --- a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt @@ -16,6 +16,7 @@ import com.unciv.UncivGame import com.unciv.logic.MapSaver import com.unciv.logic.civilization.PlayerType import com.unciv.models.UncivSound +import com.unciv.models.metadata.checkMultiplayerServerWithPort import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset.RulesetError import com.unciv.models.ruleset.Ruleset.RulesetErrorSeverity @@ -342,9 +343,9 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) { } } - - private fun successfullyConnectedToServer(action: (Boolean, String)->Unit){ - SimpleHttp.sendGetRequest( "http://"+ settings.multiplayerServer+":8080/isalive", action) + + fun successfullyConnectedToServer(action: (Boolean, String)->Unit){ + SimpleHttp.sendGetRequest("http://${settings.multiplayerServer.checkMultiplayerServerWithPort()}/isalive", action) } private fun getAdvancedTab() = Table(BaseScreen.skin).apply { diff --git a/desktop/src/com/unciv/app/desktop/UncivServer.kt b/desktop/src/com/unciv/app/desktop/UncivServer.kt index 36dffcc64d..892aad0672 100644 --- a/desktop/src/com/unciv/app/desktop/UncivServer.kt +++ b/desktop/src/com/unciv/app/desktop/UncivServer.kt @@ -12,12 +12,25 @@ import java.io.File internal object UncivServer { + private var serverPort = 8080 + @JvmStatic - fun main(arg: Array) { + fun main(args: Array) { + args.forEach { arg -> + when { + arg.startsWith("-port=") -> with(arg.removePrefix("-port=").toIntOrNull() ?: 0) { + if (this in 1024..49151) serverPort = this + else println("'port' must be between 1024 and 49151") + } + } + } + + println("Server will run on $serverPort port, you can use '-port=XXXX' custom port.") + val fileFolderName = "MultiplayerFiles" File(fileFolderName).mkdir() println(File(fileFolderName).absolutePath) - embeddedServer(Netty, port = 8080) { + embeddedServer(Netty, port = serverPort) { routing { get("/isalive") { call.respondText("true")