Custom server port (#6406)

* custom server port

* format

* format

* Modify port range.

* Custom server port in client.

* replace `rangeTo`.

* format: Rename `getUrlWithPort` to `checkMultiplayerServerWithPort`.

Co-authored-by: Yair Morgenstern <yairm210@hotmail.com>
This commit is contained in:
Tang 2022-03-25 09:40:13 -05:00 committed by GitHub
parent 84561e7ad4
commit f6a0a5595f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 10 deletions

View File

@ -1,12 +1,12 @@
package com.unciv.logic.multiplayer package com.unciv.logic.multiplayer
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.Net import com.badlogic.gdx.Net
import com.unciv.Constants import com.unciv.Constants
import com.unciv.UncivGame import com.unciv.UncivGame
import com.unciv.logic.GameInfo 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.models.metadata.checkMultiplayerServerWithPort
import com.unciv.ui.saves.Gzip import com.unciv.ui.saves.Gzip
import com.unciv.ui.worldscreen.mainmenu.OptionsPopup import com.unciv.ui.worldscreen.mainmenu.OptionsPopup
import java.util.* import java.util.*
@ -24,8 +24,8 @@ interface IFileMetaData {
class UncivServerFileStorage(val serverIp:String):IFileStorage { class UncivServerFileStorage(serverIpWithPort:String):IFileStorage {
val serverUrl = "http://$serverIp:8080" val serverUrl = "http://$serverIpWithPort"
override fun saveFileData(fileName: String, data: String) { override fun saveFileData(fileName: String, data: String) {
OptionsPopup.SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data){ OptionsPopup.SimpleHttp.sendRequest(Net.HttpMethods.PUT, "$serverUrl/files/$fileName", data){
success: Boolean, result: String -> success: Boolean, result: String ->
@ -70,7 +70,10 @@ class OnlineMultiplayer {
val settings = UncivGame.Current.settings val settings = UncivGame.Current.settings
if (settings.multiplayerServer == Constants.dropboxMultiplayerServer) if (settings.multiplayerServer == Constants.dropboxMultiplayerServer)
fileStorage = DropboxFileStorage() fileStorage = DropboxFileStorage()
else fileStorage = UncivServerFileStorage(settings.multiplayerServer) else {
val serverIpWithPort = settings.multiplayerServer.checkMultiplayerServerWithPort()
fileStorage = UncivServerFileStorage(serverIpWithPort)
}
} }
fun tryUploadGame(gameInfo: GameInfo, withPreview: Boolean) { fun tryUploadGame(gameInfo: GameInfo, withPreview: Boolean) {

View File

@ -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"
}

View File

@ -16,6 +16,7 @@ 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.models.UncivSound import com.unciv.models.UncivSound
import com.unciv.models.metadata.checkMultiplayerServerWithPort
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.Ruleset.RulesetError import com.unciv.models.ruleset.Ruleset.RulesetError
import com.unciv.models.ruleset.Ruleset.RulesetErrorSeverity import com.unciv.models.ruleset.Ruleset.RulesetErrorSeverity
@ -343,8 +344,8 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) {
} }
private fun successfullyConnectedToServer(action: (Boolean, String)->Unit){ fun successfullyConnectedToServer(action: (Boolean, String)->Unit){
SimpleHttp.sendGetRequest( "http://"+ settings.multiplayerServer+":8080/isalive", action) SimpleHttp.sendGetRequest("http://${settings.multiplayerServer.checkMultiplayerServerWithPort()}/isalive", action)
} }
private fun getAdvancedTab() = Table(BaseScreen.skin).apply { private fun getAdvancedTab() = Table(BaseScreen.skin).apply {

View File

@ -12,12 +12,25 @@ import java.io.File
internal object UncivServer { internal object UncivServer {
private var serverPort = 8080
@JvmStatic @JvmStatic
fun main(arg: Array<String>) { fun main(args: Array<String>) {
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" val fileFolderName = "MultiplayerFiles"
File(fileFolderName).mkdir() File(fileFolderName).mkdir()
println(File(fileFolderName).absolutePath) println(File(fileFolderName).absolutePath)
embeddedServer(Netty, port = 8080) { embeddedServer(Netty, port = serverPort) {
routing { routing {
get("/isalive") { get("/isalive") {
call.respondText("true") call.respondText("true")