use of net.runelite.cache.fs.Store in project runelite by runelite.
the class CacheServerTest method testDownload.
@Test
@Ignore
public void testDownload() throws Exception {
try (Store store = new Store(StoreLocation.LOCATION);
CacheServer server = new CacheServer(store, REVISION)) {
store.load();
server.start();
try (CacheClient client = new CacheClient(new Store(folder.newFolder()), HOST, REVISION)) {
client.connect();
client.handshake().get();
client.download();
}
}
}
use of net.runelite.cache.fs.Store in project runelite by runelite.
the class CacheUpdater method update.
public void update() throws IOException, InvalidEndpointException, InvalidPortException, InterruptedException {
int rsVersion = RuneLiteAPI.getRsVersion();
try (Connection con = sql2o.beginTransaction()) {
CacheDAO cacheDao = new CacheDAO();
CacheEntry cache = cacheDao.findMostRecent(con);
boolean created = false;
if (cache == null) {
created = true;
cache = cacheDao.createCache(con, rsVersion, Instant.now());
}
CacheStorage storage = new CacheStorage(cache, cacheDao, con);
Store store = new Store(storage);
store.load();
ExecutorService executor = Executors.newSingleThreadExecutor();
CacheClient client = new CacheClient(store, rsVersion, (Archive archive, byte[] data) -> executor.submit(new CacheUploader(minioClient, minioBucket, archive, data)));
client.connect();
HandshakeResponseType result = client.handshake().join();
if (result != HandshakeResponseType.RESPONSE_OK) {
logger.warn("Out of date!");
return;
}
List<IndexInfo> indexes = client.requestIndexes();
List<IndexEntry> entries = cacheDao.findIndexesForCache(con, cache);
if (!checkOutOfDate(indexes, entries)) {
logger.info("All up to date.");
return;
}
client.download();
CacheEntry newCache = created ? cache : cacheDao.createCache(con, rsVersion, Instant.now());
storage.setCacheEntry(newCache);
store.save();
// ensure objects are added to the store before they become
// visible in the database
executor.shutdown();
while (!executor.awaitTermination(1, TimeUnit.SECONDS)) {
logger.debug("Waiting for termination of executor...");
}
// commit database
con.commit();
}
}
use of net.runelite.cache.fs.Store in project runelite by runelite.
the class SoundEffectsDumperTest method test.
@Test
public void test() throws IOException {
File dumpDir = folder.newFolder();
int count = 0;
try (Store store = new Store(StoreLocation.LOCATION)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.SOUNDEFFECTS);
for (Archive archive : index.getArchives()) {
byte[] contents = archive.decompress(storage.loadArchive(archive));
SoundEffectLoader soundEffectLoader = new SoundEffectLoader();
SoundEffectDefinition soundEffect = soundEffectLoader.load(contents);
Files.write(gson.toJson(soundEffect), new File(dumpDir, archive.getArchiveId() + ".json"), Charset.defaultCharset());
++count;
}
}
logger.info("Dumped {} sound effects to {}", count, dumpDir);
}
use of net.runelite.cache.fs.Store in project runelite by runelite.
the class ItemManagerTest method test.
@Test
public void test() throws IOException {
File dumpDir = folder.newFolder(), javaDir = folder.newFolder();
Store store = new Store(StoreLocation.LOCATION);
store.load();
ItemManager dumper = new ItemManager(store);
dumper.load();
dumper.export(dumpDir);
dumper.java(javaDir);
logger.info("Dumped to {}, java {}", dumpDir, javaDir);
}
use of net.runelite.cache.fs.Store in project runelite by runelite.
the class MapDumperTest method dumpRaw.
@Test
@Ignore
public void dumpRaw() throws IOException {
File base = StoreLocation.LOCATION, outDir = folder.newFolder();
XteaKeyManager keyManager = new XteaKeyManager();
keyManager.loadKeys();
try (Store store = new Store(base)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.MAPS);
for (int i = 0; i < MAX_REGIONS; i++) {
int[] keys = keyManager.getKeys(i);
int x = i >> 8;
int y = i & 0xFF;
Archive map = index.findArchiveByName("m" + x + "_" + y);
Archive land = index.findArchiveByName("l" + x + "_" + y);
assert (map == null) == (land == null);
if (map == null || land == null) {
continue;
}
byte[] data = map.decompress(storage.loadArchive(map));
Files.write(data, new File(outDir, "m" + x + "_" + y + ".dat"));
if (keys != null) {
try {
data = land.decompress(storage.loadArchive(land), keys);
} catch (IOException ex) {
logger.info("Unable to decompress and load land " + x + "," + y + " (bad keys?)", ex);
continue;
}
logger.info("Decrypted region {} coords {},{}", i, x, y);
Files.write(data, new File(outDir, "l" + x + "_" + y + ".dat"));
}
}
}
}
Aggregations