Files
runelite/runescape-client/src/main/java/NetSocket.java
ThatGamerBlue 655106b9df chore: rev 190
2020-06-18 12:15:38 +01:00

417 lines
9.2 KiB
Java

import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import net.runelite.mapping.Export;
import net.runelite.mapping.Implements;
import net.runelite.mapping.ObfuscatedGetter;
import net.runelite.mapping.ObfuscatedName;
import net.runelite.mapping.ObfuscatedSignature;
@ObfuscatedName("fh")
@Implements("NetSocket")
public final class NetSocket extends AbstractSocket implements Runnable {
@ObfuscatedName("st")
@ObfuscatedSignature(
signature = "Lcz;"
)
@Export("clientPreferences")
static ClientPreferences clientPreferences;
@ObfuscatedName("m")
@Export("inputStream")
InputStream inputStream;
@ObfuscatedName("o")
@Export("socket")
Socket socket;
@ObfuscatedName("q")
@Export("outputStream")
OutputStream outputStream;
@ObfuscatedName("j")
@Export("isClosed")
boolean isClosed;
@ObfuscatedName("p")
@ObfuscatedSignature(
signature = "Lfm;"
)
@Export("taskHandler")
TaskHandler taskHandler;
@ObfuscatedName("g")
@ObfuscatedSignature(
signature = "Lfa;"
)
@Export("task")
Task task;
@ObfuscatedName("n")
@Export("outBuffer")
byte[] outBuffer;
@ObfuscatedName("u")
@ObfuscatedGetter(
intValue = -1562381729
)
@Export("outLength")
int outLength;
@ObfuscatedName("a")
@ObfuscatedGetter(
intValue = -171573129
)
@Export("outOffset")
int outOffset;
@ObfuscatedName("z")
@Export("exceptionWriting")
boolean exceptionWriting;
@ObfuscatedName("w")
@ObfuscatedGetter(
intValue = -881465833
)
@Export("bufferLength")
final int bufferLength;
@ObfuscatedName("y")
@ObfuscatedGetter(
intValue = -1622692111
)
@Export("maxPacketLength")
final int maxPacketLength;
@ObfuscatedSignature(
signature = "(Ljava/net/Socket;Lfm;I)V"
)
public NetSocket(Socket var1, TaskHandler var2, int var3) throws IOException {
this.isClosed = false;
this.outLength = 0;
this.outOffset = 0;
this.exceptionWriting = false;
this.taskHandler = var2;
this.socket = var1;
this.bufferLength = var3;
this.maxPacketLength = var3 - 100;
this.socket.setSoTimeout(30000);
this.socket.setTcpNoDelay(true);
this.socket.setReceiveBufferSize(65536);
this.socket.setSendBufferSize(65536);
this.inputStream = this.socket.getInputStream();
this.outputStream = this.socket.getOutputStream();
}
@ObfuscatedName("m")
@ObfuscatedSignature(
signature = "(I)V",
garbageValue = "-768493590"
)
@Export("close")
public void close() {
if (!this.isClosed) {
synchronized(this) {
this.isClosed = true;
this.notifyAll();
}
if (this.task != null) {
while (this.task.status == 0) {
SpriteMask.sleepExact(1L);
}
if (this.task.status == 1) {
try {
((Thread)this.task.result).join();
} catch (InterruptedException var3) {
}
}
}
this.task = null;
}
}
@ObfuscatedName("o")
@ObfuscatedSignature(
signature = "(B)I",
garbageValue = "-8"
)
@Export("readUnsignedByte")
public int readUnsignedByte() throws IOException {
return this.isClosed ? 0 : this.inputStream.read();
}
@ObfuscatedName("q")
@ObfuscatedSignature(
signature = "(I)I",
garbageValue = "-1942767880"
)
@Export("available")
public int available() throws IOException {
return this.isClosed ? 0 : this.inputStream.available();
}
@ObfuscatedName("j")
@ObfuscatedSignature(
signature = "(II)Z",
garbageValue = "1355091335"
)
@Export("isAvailable")
public boolean isAvailable(int var1) throws IOException {
if (this.isClosed) {
return false;
} else {
return this.inputStream.available() >= var1;
}
}
@ObfuscatedName("p")
@ObfuscatedSignature(
signature = "([BIIB)I",
garbageValue = "37"
)
@Export("read")
public int read(byte[] var1, int var2, int var3) throws IOException {
if (this.isClosed) {
return 0;
} else {
int var4;
int var5;
for (var4 = var3; var3 > 0; var3 -= var5) {
var5 = this.inputStream.read(var1, var2, var3);
if (var5 <= 0) {
throw new EOFException();
}
var2 += var5;
}
return var4;
}
}
@ObfuscatedName("g")
@ObfuscatedSignature(
signature = "([BIII)V",
garbageValue = "-950578253"
)
@Export("write0")
void write0(byte[] var1, int var2, int var3) throws IOException {
if (!this.isClosed) {
if (this.exceptionWriting) {
this.exceptionWriting = false;
throw new IOException();
} else {
if (this.outBuffer == null) {
this.outBuffer = new byte[this.bufferLength];
}
synchronized(this) {
for (int var5 = 0; var5 < var3; ++var5) {
this.outBuffer[this.outOffset] = var1[var5 + var2];
this.outOffset = (this.outOffset + 1) % this.bufferLength;
if ((this.maxPacketLength + this.outLength) % this.bufferLength == this.outOffset) {
throw new IOException();
}
}
if (this.task == null) {
this.task = this.taskHandler.newThreadTask(this, 3);
}
this.notifyAll();
}
}
}
}
@ObfuscatedName("n")
@ObfuscatedSignature(
signature = "([BIIB)V",
garbageValue = "-105"
)
@Export("write")
public void write(byte[] var1, int var2, int var3) throws IOException {
this.write0(var1, var2, var3);
}
protected void finalize() {
this.close();
}
public void run() {
try {
while (true) {
label84: {
int var1;
int var2;
synchronized(this) {
if (this.outLength == this.outOffset) {
if (this.isClosed) {
break label84;
}
try {
this.wait();
} catch (InterruptedException var10) {
}
}
var2 = this.outLength;
if (this.outOffset >= this.outLength) {
var1 = this.outOffset - this.outLength;
} else {
var1 = this.bufferLength - this.outLength;
}
}
if (var1 <= 0) {
continue;
}
try {
this.outputStream.write(this.outBuffer, var2, var1);
} catch (IOException var9) {
this.exceptionWriting = true;
}
this.outLength = (var1 + this.outLength) % this.bufferLength;
try {
if (this.outLength == this.outOffset) {
this.outputStream.flush();
}
} catch (IOException var8) {
this.exceptionWriting = true;
}
continue;
}
try {
if (this.inputStream != null) {
this.inputStream.close();
}
if (this.outputStream != null) {
this.outputStream.close();
}
if (this.socket != null) {
this.socket.close();
}
} catch (IOException var7) {
}
this.outBuffer = null;
break;
}
} catch (Exception var12) {
class197.RunException_sendStackTrace((String)null, var12);
}
}
@ObfuscatedName("m")
@ObfuscatedSignature(
signature = "(IB)Ljm;",
garbageValue = "67"
)
@Export("SequenceDefinition_get")
public static SequenceDefinition SequenceDefinition_get(int var0) {
SequenceDefinition var1 = (SequenceDefinition)SequenceDefinition.SequenceDefinition_cached.get((long)var0);
if (var1 != null) {
return var1;
} else {
byte[] var2 = SequenceDefinition.SequenceDefinition_archive.takeFile(12, var0);
var1 = new SequenceDefinition();
if (var2 != null) {
var1.decode(new Buffer(var2));
}
var1.postDecode();
SequenceDefinition.SequenceDefinition_cached.put(var1, (long)var0);
return var1;
}
}
@ObfuscatedName("u")
@ObfuscatedSignature(
signature = "(Lkn;J)V"
)
static void method3677(Buffer var0, long var1) {
var1 /= 10L;
if (var1 < 0L) {
var1 = 0L;
} else if (var1 > 65535L) {
var1 = 65535L;
}
var0.writeShort((int)var1);
}
@ObfuscatedName("z")
@ObfuscatedSignature(
signature = "(II)Leg;",
garbageValue = "-1650164099"
)
@Export("getFrames")
static Frames getFrames(int var0) {
Frames var1 = (Frames)SequenceDefinition.SequenceDefinition_cachedFrames.get((long)var0);
if (var1 != null) {
return var1;
} else {
AbstractArchive var3 = SequenceDefinition.SequenceDefinition_animationsArchive;
AbstractArchive var4 = SequenceDefinition.SequenceDefinition_skeletonsArchive;
boolean var5 = true;
int[] var6 = var3.getGroupFileIds(var0);
for (int var7 = 0; var7 < var6.length; ++var7) {
byte[] var8 = var3.getFile(var0, var6[var7]);
if (var8 == null) {
var5 = false;
} else {
int var9 = (var8[0] & 255) << 8 | var8[1] & 255;
byte[] var10 = var4.getFile(var9, 0);
if (var10 == null) {
var5 = false;
}
}
}
Frames var2;
if (!var5) {
var2 = null;
} else {
try {
var2 = new Frames(var3, var4, var0, false);
} catch (Exception var12) {
var2 = null;
}
}
if (var2 != null) {
SequenceDefinition.SequenceDefinition_cachedFrames.put(var2, (long)var0);
}
return var2;
}
}
@ObfuscatedName("ko")
@ObfuscatedSignature(
signature = "(I)V",
garbageValue = "2085444453"
)
static void method3674() {
if (Client.field756 && class60.localPlayer != null) {
int var0 = class60.localPlayer.pathX[0];
int var1 = class60.localPlayer.pathY[0];
if (var0 < 0 || var1 < 0 || var0 >= 104 || var1 >= 104) {
return;
}
class225.oculusOrbFocalPointX = class60.localPlayer.x;
int var2 = Language.getTileHeight(class60.localPlayer.x, class60.localPlayer.y, TileItemPile.Client_plane) - Client.camFollowHeight;
if (var2 < WorldMapDecoration.field234) {
WorldMapDecoration.field234 = var2;
}
HealthBarDefinition.oculusOrbFocalPointY = class60.localPlayer.y;
Client.field756 = false;
}
}
}