Fixed Multiplayer Turn Notifier periodically failing with error notification. (#2054)

This commit is contained in:
wrov
2020-03-02 05:44:53 +01:00
committed by GitHub
parent 10b95c6c1c
commit 1df0c408aa
8 changed files with 96 additions and 29 deletions

View File

@ -3,6 +3,7 @@ package com.unciv.logic
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.files.FileHandle
import com.badlogic.gdx.utils.Json
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.metadata.GameSettings
import com.unciv.ui.utils.ImageGetter
import java.io.File
@ -95,5 +96,15 @@ class GameSaver {
}
}
/**
* Returns current turn's player from GameInfo JSON-String for multiplayer.
* Does not initialize transitive GameInfo data.
* It is therefore stateless and save to call for Multiplayer Turn Notifier, unlike gameInfoFromString().
*/
fun currentTurnCivFromString(gameData: String): CivilizationInfo {
val game = json().fromJson(GameInfo::class.java, gameData)
return game.getCivilization(game.currentPlayer)
}
}

View File

@ -2,6 +2,7 @@ package com.unciv.ui.worldscreen.mainmenu
import com.unciv.logic.GameInfo
import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.ui.saves.Gzip
import java.io.BufferedReader
import java.io.DataOutputStream
@ -9,7 +10,7 @@ import java.io.InputStream
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL
import java.nio.charset.StandardCharsets
import java.nio.charset.Charset
class DropBox {
@ -27,7 +28,8 @@ class DropBox {
try {
if (data != "") {
val postData: ByteArray = data.toByteArray(StandardCharsets.UTF_8)
// StandardCharsets.UTF_8 requires API 19
val postData: ByteArray = data.toByteArray(Charset.forName("UTF-8"))
val outputStream = DataOutputStream(outputStream)
outputStream.write(postData)
outputStream.flush()
@ -103,4 +105,14 @@ class OnlineMultiplayer {
val zippedGameInfo = DropBox().downloadFileAsString(getGameLocation(gameId))
return GameSaver().gameInfoFromString(Gzip.unzip(zippedGameInfo))
}
/**
* Returns current turn's player.
* Does not initialize transitive GameInfo data.
* It is therefore stateless and save to call for Multiplayer Turn Notifier, unlike tryDownloadGame().
*/
fun tryDownloadCurrentTurnCiv(gameId: String): CivilizationInfo {
val zippedGameInfo = DropBox().downloadFileAsString(getGameLocation(gameId))
return GameSaver().currentTurnCivFromString(Gzip.unzip(zippedGameInfo))
}
}