mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2026-08-17 08:25:14 -06:00
132 lines
3.9 KiB
Java
132 lines
3.9 KiB
Java
package rt4;
|
|
|
|
import org.openrs2.deob.annotation.OriginalArg;
|
|
import org.openrs2.deob.annotation.OriginalClass;
|
|
import org.openrs2.deob.annotation.OriginalMember;
|
|
import org.openrs2.deob.annotation.Pc;
|
|
|
|
@OriginalClass("client!k")
|
|
public final class Js5CacheQueue implements Runnable {
|
|
|
|
@OriginalMember(owner = "client!k", name = "q", descriptor = "Lclient!ce;")
|
|
private final SecondaryLinkedList queue = new SecondaryLinkedList();
|
|
|
|
@OriginalMember(owner = "client!k", name = "s", descriptor = "I")
|
|
public int size = 0;
|
|
|
|
@OriginalMember(owner = "client!k", name = "w", descriptor = "Z")
|
|
private boolean stop = false;
|
|
|
|
@OriginalMember(owner = "client!k", name = "v", descriptor = "Ljava/lang/Thread;")
|
|
private Thread thread;
|
|
|
|
@OriginalMember(owner = "client!k", name = "<init>", descriptor = "()V")
|
|
public Js5CacheQueue() {
|
|
@Pc(20) PrivilegedRequest request = GameShell.signLink.startThread(5, this);
|
|
while (request.status == 0) {
|
|
ThreadUtils.sleep(10L);
|
|
}
|
|
if (request.status == 2) {
|
|
throw new RuntimeException();
|
|
}
|
|
this.thread = (Thread) request.result;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!c;I)V")
|
|
private void enqueue(@OriginalArg(0) Js5CacheRequest arg0) {
|
|
synchronized (this.queue) {
|
|
this.queue.addTail(arg0);
|
|
this.size++;
|
|
this.queue.notifyAll();
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!k", name = "a", descriptor = "(I)V")
|
|
public final void quit() {
|
|
this.stop = true;
|
|
synchronized (this.queue) {
|
|
this.queue.notifyAll();
|
|
}
|
|
try {
|
|
this.thread.join();
|
|
} catch (@Pc(23) InterruptedException ignored) {
|
|
}
|
|
this.thread = null;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!ge;I[BI)Lclient!c;")
|
|
public final Js5CacheRequest write(@OriginalArg(0) Cache arg0, @OriginalArg(2) byte[] arg1, @OriginalArg(3) int arg2) {
|
|
@Pc(7) Js5CacheRequest request = new Js5CacheRequest();
|
|
request.data = arg1;
|
|
request.urgent = false;
|
|
request.secondaryKey = arg2;
|
|
request.cache = arg0;
|
|
request.type = 2;
|
|
this.enqueue(request);
|
|
return request;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!k", name = "a", descriptor = "(IILclient!ge;)Lclient!c;")
|
|
public final Js5CacheRequest read(@OriginalArg(0) int arg0, @OriginalArg(2) Cache arg1) {
|
|
@Pc(7) Js5CacheRequest local7 = new Js5CacheRequest();
|
|
local7.cache = arg1;
|
|
local7.type = 3;
|
|
local7.urgent = false;
|
|
local7.secondaryKey = arg0;
|
|
this.enqueue(local7);
|
|
return local7;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!k", name = "a", descriptor = "(Lclient!ge;BI)Lclient!c;")
|
|
public final Js5CacheRequest readSynchronous(@OriginalArg(0) Cache arg0, @OriginalArg(2) int arg1) {
|
|
@Pc(9) Js5CacheRequest local9 = new Js5CacheRequest();
|
|
local9.type = 1;
|
|
synchronized (this.queue) {
|
|
@Pc(31) Js5CacheRequest local31 = (Js5CacheRequest) this.queue.head();
|
|
while (true) {
|
|
if (local31 == null) {
|
|
break;
|
|
}
|
|
if (local31.secondaryKey == (long) arg1 && local31.cache == arg0 && local31.type == 2) {
|
|
local9.data = local31.data;
|
|
local9.incomplete = false;
|
|
return local9;
|
|
}
|
|
local31 = (Js5CacheRequest) this.queue.next();
|
|
}
|
|
}
|
|
local9.data = arg0.read(arg1);
|
|
local9.incomplete = false;
|
|
local9.urgent = true;
|
|
return local9;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!k", name = "run", descriptor = "()V")
|
|
@Override
|
|
public final void run() {
|
|
while (!this.stop) {
|
|
@Pc(19) Js5CacheRequest local19;
|
|
synchronized (this.queue) {
|
|
local19 = (Js5CacheRequest) this.queue.removeHead();
|
|
if (local19 == null) {
|
|
try {
|
|
this.queue.wait();
|
|
} catch (@Pc(35) InterruptedException ignored) {
|
|
}
|
|
continue;
|
|
}
|
|
this.size--;
|
|
}
|
|
try {
|
|
if (local19.type == 2) {
|
|
local19.cache.write((int) local19.secondaryKey, local19.data.length, local19.data);
|
|
} else if (local19.type == 3) {
|
|
local19.data = local19.cache.read((int) local19.secondaryKey);
|
|
}
|
|
} catch (@Pc(83) Exception local83) {
|
|
TracingException.report(null, local83);
|
|
}
|
|
local19.incomplete = false;
|
|
}
|
|
}
|
|
}
|