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.
64 lines
1.9 KiB
64 lines
1.9 KiB
3 years ago
|
package org.openrs2.archive.masterindex
|
||
|
|
||
|
import io.netty.buffer.ByteBuf
|
||
|
import org.openrs2.archive.container.Container
|
||
|
import org.openrs2.archive.container.ContainerImporter
|
||
|
import org.openrs2.buffer.use
|
||
|
import org.openrs2.cache.Js5Compression
|
||
|
import org.openrs2.cache.Js5MasterIndex
|
||
|
import org.openrs2.db.Database
|
||
|
import javax.inject.Inject
|
||
|
import javax.inject.Singleton
|
||
|
|
||
|
@Singleton
|
||
|
public class MasterIndexImporter @Inject constructor(
|
||
|
private val database: Database
|
||
|
) {
|
||
|
private class MasterIndex(
|
||
|
data: ByteBuf,
|
||
|
val index: Js5MasterIndex
|
||
|
) : Container(data) {
|
||
|
override val encrypted: Boolean = false
|
||
|
}
|
||
|
|
||
|
public suspend fun import(buf: ByteBuf) {
|
||
|
database.execute { connection ->
|
||
|
ContainerImporter.prepare(connection)
|
||
|
|
||
|
val masterIndex = Js5Compression.uncompress(buf).use { uncompressed ->
|
||
|
MasterIndex(buf, Js5MasterIndex.read(uncompressed))
|
||
|
}
|
||
|
|
||
|
val containerId = ContainerImporter.addContainer(connection, masterIndex)
|
||
|
|
||
|
connection.prepareStatement(
|
||
|
"""
|
||
|
INSERT INTO master_indexes (container_id)
|
||
|
VALUES (?)
|
||
|
""".trimIndent()
|
||
|
).use { stmt ->
|
||
|
stmt.setLong(1, containerId)
|
||
|
stmt.execute()
|
||
|
}
|
||
|
|
||
|
connection.prepareStatement(
|
||
|
"""
|
||
|
INSERT INTO master_index_entries (container_id, archive_id, crc32, version)
|
||
|
VALUES (?, ?, ?, ?)
|
||
|
""".trimIndent()
|
||
|
).use { stmt ->
|
||
|
for ((i, entry) in masterIndex.index.entries.withIndex()) {
|
||
|
stmt.setLong(1, containerId)
|
||
|
stmt.setInt(2, i)
|
||
|
stmt.setInt(3, entry.checksum)
|
||
|
stmt.setInt(4, entry.version)
|
||
|
|
||
|
stmt.addBatch()
|
||
|
}
|
||
|
|
||
|
stmt.executeBatch()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|