Files
GaCyGO-Android/app/src/main/java/com/gacy/android/model/ServerModels.kt
T

47 lines
1.9 KiB
Kotlin

package com.gacy.android.model
import java.net.URI
enum class ServerExecutionMode(val displayNameTh: String, val displayNameEn: String) {
LOCAL_EMBEDDED("รันในเครื่อง (Local Embedded)", "Local Embedded Runtime"),
REMOTE_SERVER("เชื่อมต่อเซิร์ฟเวอร์ภายนอก (Remote Server)", "Remote Server Connection")
}
enum class ServerStatus {
STOPPED,
STARTING,
RUNNING,
STOPPING,
ERROR
}
data class ServerConfig(
val executionMode: ServerExecutionMode = ServerExecutionMode.LOCAL_EMBEDDED,
val remoteHost: String = "127.0.0.1",
val dispatchPort: Int = 21000,
val gameserverPort: Int = 23301,
val serverKey: String = "",
val sendHotfix: Boolean = true
) {
val dispatchUrl: String
get() = "http://${if (executionMode == ServerExecutionMode.LOCAL_EMBEDDED) "127.0.0.1" else remoteHost}:$dispatchPort"
/** Parse the host and ports the same way they will be used by the server. */
fun withNetworkInput(mode: ServerExecutionMode, host: String, sdkPort: String, gamePort: String): ServerConfig? {
val cleanHost = host.trim()
val sdk = sdkPort.toIntOrNull()?.takeIf { it in 1..65535 } ?: return null
val game = gamePort.toIntOrNull()?.takeIf { it in 1..65535 } ?: return null
val address = try { URI("http://$cleanHost") } catch (_: Exception) { return null }
if (address.host.isNullOrBlank() || address.port != -1 || address.userInfo != null ||
!address.rawPath.isNullOrEmpty() || address.rawQuery != null || address.rawFragment != null ||
cleanHost.contains(':') || cleanHost == "0.0.0.0") return null
return copy(executionMode = mode, remoteHost = cleanHost, dispatchPort = sdk, gameserverPort = game)
}
}
data class GmCommandResult(
val success: Boolean,
val message: String,
val timestamp: Long = System.currentTimeMillis()
)