Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openrs2/bundler/src/main/java/dev/openrs2/bundler/Resource.kt

97 lines
3.1 KiB

package dev.openrs2.bundler
import java.security.MessageDigest
import java.util.zip.CRC32
import java.util.zip.Deflater
class Resource(
val source: String,
val destination: String,
val digest: ByteArray,
val uncompressedSize: Int,
val content: ByteArray
) {
val compressedSize: Int
get() = content.size
init {
require(digest.size == 20)
}
companion object {
fun compress(source: String, destination: String, uncompressed: ByteArray): Resource {
val crc = CRC32()
crc.update(uncompressed)
val sourceWithCrc = source.replace(".", "_${crc.value.toInt()}.")
val digest = MessageDigest.getInstance("SHA-1")
digest.update(uncompressed)
val compressed = ByteArray(uncompressed.size)
val compressedSize: Int
val deflater = Deflater(Deflater.BEST_COMPRESSION, true)
try {
deflater.setInput(uncompressed)
deflater.finish()
compressedSize = deflater.deflate(compressed)
} finally {
deflater.end()
}
val content = if (compressedSize < uncompressed.size) {
compressed.copyOf(compressedSize)
} else {
uncompressed
}
return Resource(sourceWithCrc, destination, digest.digest(), uncompressed.size, content)
}
private fun compress(source: String, destination: String, resource: String): Resource {
val uncompressed = Resource::class.java.getResourceAsStream(resource).use { it.readBytes() }
return compress(source, destination, uncompressed)
}
fun compressGlResources() = listOf(
// Windows i386
listOf(
compress("jaggl_0_0.lib", "jaggl.dll", "/natives/windows-i386/jaggl.dll")
),
// Windows amd64
listOf(
compress("jaggl_1_0.lib", "jaggl.dll", "/natives/windows-amd64/jaggl.dll")
),
// macOS i386
listOf(
compress("jaggl_2_0.lib", "libjaggl.dylib", "/natives/mac-i386/libjaggl.dylib")
),
// macOS amd64
listOf(
compress("jaggl_3_0.lib", "libjaggl.dylib", "/natives/mac-amd64/libjaggl.dylib")
),
// Linux i386
listOf(
compress("jaggl_4_0.lib", "libjaggl.so", "/natives/linux-i386/libjaggl.so"),
compress("jaggl_4_1.lib", "libjaggl_dri.so", "/natives/linux-i386/libjaggl_dri.so")
),
// Linux amd64
listOf(
compress("jaggl_5_0.lib", "libjaggl.so", "/natives/linux-amd64/libjaggl.so"),
compress("jaggl_5_1.lib", "libjaggl_dri.so", "/natives/linux-amd64/libjaggl_dri.so")
)
)
fun compressMiscResources() = listOf(
compress("jagmisc_0.lib", "jagmisc.dll", "/natives/windows-i386/jagmisc.dll"),
compress("jagmisc_1.lib", "jagmisc.dll", "/natives/windows-amd64/jagmisc.dll")
)
}
}