672 lines
17 KiB
Java
672 lines
17 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("ey")
|
|
@Implements("NetSocket")
|
|
public final class NetSocket extends AbstractSocket implements Runnable {
|
|
@ObfuscatedName("n")
|
|
@Export("inputStream")
|
|
InputStream inputStream;
|
|
@ObfuscatedName("c")
|
|
@Export("outputStream")
|
|
OutputStream outputStream;
|
|
@ObfuscatedName("m")
|
|
@Export("socket")
|
|
Socket socket;
|
|
@ObfuscatedName("k")
|
|
@Export("isClosed")
|
|
boolean isClosed;
|
|
@ObfuscatedName("o")
|
|
@ObfuscatedSignature(
|
|
descriptor = "Lei;"
|
|
)
|
|
@Export("taskHandler")
|
|
TaskHandler taskHandler;
|
|
@ObfuscatedName("g")
|
|
@ObfuscatedSignature(
|
|
descriptor = "Led;"
|
|
)
|
|
@Export("task")
|
|
Task task;
|
|
@ObfuscatedName("z")
|
|
@Export("outBuffer")
|
|
byte[] outBuffer;
|
|
@ObfuscatedName("a")
|
|
@ObfuscatedGetter(
|
|
intValue = -667333841
|
|
)
|
|
@Export("outLength")
|
|
int outLength;
|
|
@ObfuscatedName("u")
|
|
@ObfuscatedGetter(
|
|
intValue = -1790870427
|
|
)
|
|
@Export("outOffset")
|
|
int outOffset;
|
|
@ObfuscatedName("e")
|
|
@Export("exceptionWriting")
|
|
boolean exceptionWriting;
|
|
@ObfuscatedName("l")
|
|
@ObfuscatedGetter(
|
|
intValue = 1964059901
|
|
)
|
|
@Export("bufferLength")
|
|
final int bufferLength;
|
|
@ObfuscatedName("y")
|
|
@ObfuscatedGetter(
|
|
intValue = -1087306249
|
|
)
|
|
@Export("maxPacketLength")
|
|
final int maxPacketLength;
|
|
|
|
@ObfuscatedSignature(
|
|
descriptor = "(Ljava/net/Socket;Lei;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("n")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(S)V",
|
|
garbageValue = "4535"
|
|
)
|
|
@Export("close")
|
|
public void close() {
|
|
if (!this.isClosed) {
|
|
synchronized(this) {
|
|
this.isClosed = true;
|
|
this.notifyAll();
|
|
}
|
|
|
|
if (this.task != null) {
|
|
while (this.task.status == 0) {
|
|
PlayerType.method5099(1L);
|
|
}
|
|
|
|
if (this.task.status == 1) {
|
|
try {
|
|
((Thread)this.task.result).join();
|
|
} catch (InterruptedException var3) {
|
|
}
|
|
}
|
|
}
|
|
|
|
this.task = null;
|
|
}
|
|
}
|
|
|
|
@ObfuscatedName("c")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(B)I",
|
|
garbageValue = "61"
|
|
)
|
|
@Export("readUnsignedByte")
|
|
public int readUnsignedByte() throws IOException {
|
|
return this.isClosed ? 0 : this.inputStream.read();
|
|
}
|
|
|
|
@ObfuscatedName("m")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(I)I",
|
|
garbageValue = "-1430321597"
|
|
)
|
|
@Export("available")
|
|
public int available() throws IOException {
|
|
return this.isClosed ? 0 : this.inputStream.available();
|
|
}
|
|
|
|
@ObfuscatedName("k")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(II)Z",
|
|
garbageValue = "823949627"
|
|
)
|
|
@Export("isAvailable")
|
|
public boolean isAvailable(int var1) throws IOException {
|
|
if (this.isClosed) {
|
|
return false;
|
|
} else {
|
|
return this.inputStream.available() >= var1;
|
|
}
|
|
}
|
|
|
|
@ObfuscatedName("o")
|
|
@ObfuscatedSignature(
|
|
descriptor = "([BIII)I",
|
|
garbageValue = "593938417"
|
|
)
|
|
@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(
|
|
descriptor = "([BIII)V",
|
|
garbageValue = "195666295"
|
|
)
|
|
@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("z")
|
|
@ObfuscatedSignature(
|
|
descriptor = "([BIIB)V",
|
|
garbageValue = "-4"
|
|
)
|
|
@Export("write")
|
|
public void write(byte[] var1, int var2, int var3) throws IOException {
|
|
this.write0(var1, var2, var3);
|
|
}
|
|
|
|
public void run() {
|
|
try {
|
|
while (true) {
|
|
label84: {
|
|
int var1;
|
|
int var2;
|
|
synchronized(this) {
|
|
if (this.outOffset == this.outLength) {
|
|
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.outOffset == this.outLength) {
|
|
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) {
|
|
class4.RunException_sendStackTrace((String)null, var12);
|
|
}
|
|
|
|
}
|
|
|
|
protected void finalize() {
|
|
this.close();
|
|
}
|
|
|
|
@ObfuscatedName("c")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(Loq;II)V",
|
|
garbageValue = "-1829651268"
|
|
)
|
|
@Export("updatePlayers")
|
|
static final void updatePlayers(PacketBuffer var0, int var1) {
|
|
int var2 = var0.offset;
|
|
Players.Players_pendingUpdateCount = 0;
|
|
int var3 = 0;
|
|
var0.importIndex();
|
|
|
|
int var4;
|
|
int var6;
|
|
byte[] var10000;
|
|
int var19;
|
|
for (var4 = 0; var4 < Players.Players_count; ++var4) {
|
|
var19 = Players.Players_indices[var4];
|
|
if ((Players.field1244[var19] & 1) == 0) {
|
|
if (var3 > 0) {
|
|
--var3;
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else {
|
|
var6 = var0.readBits(1);
|
|
if (var6 == 0) {
|
|
var3 = ReflectionCheck.method1083(var0);
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else {
|
|
NetCache.readPlayerUpdate(var0, var19);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var0.exportIndex();
|
|
if (var3 != 0) {
|
|
throw new RuntimeException();
|
|
} else {
|
|
var0.importIndex();
|
|
|
|
for (var4 = 0; var4 < Players.Players_count; ++var4) {
|
|
var19 = Players.Players_indices[var4];
|
|
if ((Players.field1244[var19] & 1) != 0) {
|
|
if (var3 > 0) {
|
|
--var3;
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else {
|
|
var6 = var0.readBits(1);
|
|
if (var6 == 0) {
|
|
var3 = ReflectionCheck.method1083(var0);
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else {
|
|
NetCache.readPlayerUpdate(var0, var19);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var0.exportIndex();
|
|
if (var3 != 0) {
|
|
throw new RuntimeException();
|
|
} else {
|
|
var0.importIndex();
|
|
|
|
for (var4 = 0; var4 < Players.Players_emptyIdxCount; ++var4) {
|
|
var19 = Players.Players_emptyIndices[var4];
|
|
if ((Players.field1244[var19] & 1) != 0) {
|
|
if (var3 > 0) {
|
|
--var3;
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else {
|
|
var6 = var0.readBits(1);
|
|
if (var6 == 0) {
|
|
var3 = ReflectionCheck.method1083(var0);
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else if (MusicPatchNode.updateExternalPlayer(var0, var19)) {
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var0.exportIndex();
|
|
if (var3 != 0) {
|
|
throw new RuntimeException();
|
|
} else {
|
|
var0.importIndex();
|
|
|
|
for (var4 = 0; var4 < Players.Players_emptyIdxCount; ++var4) {
|
|
var19 = Players.Players_emptyIndices[var4];
|
|
if ((Players.field1244[var19] & 1) == 0) {
|
|
if (var3 > 0) {
|
|
--var3;
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else {
|
|
var6 = var0.readBits(1);
|
|
if (var6 == 0) {
|
|
var3 = ReflectionCheck.method1083(var0);
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
} else if (MusicPatchNode.updateExternalPlayer(var0, var19)) {
|
|
var10000 = Players.field1244;
|
|
var10000[var19] = (byte)(var10000[var19] | 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var0.exportIndex();
|
|
if (var3 != 0) {
|
|
throw new RuntimeException();
|
|
} else {
|
|
Players.Players_count = 0;
|
|
Players.Players_emptyIdxCount = 0;
|
|
|
|
Player var5;
|
|
for (var4 = 1; var4 < 2048; ++var4) {
|
|
var10000 = Players.field1244;
|
|
var10000[var4] = (byte)(var10000[var4] >> 1);
|
|
var5 = Client.players[var4];
|
|
if (var5 != null) {
|
|
Players.Players_indices[++Players.Players_count - 1] = var4;
|
|
} else {
|
|
Players.Players_emptyIndices[++Players.Players_emptyIdxCount - 1] = var4;
|
|
}
|
|
}
|
|
|
|
for (var3 = 0; var3 < Players.Players_pendingUpdateCount; ++var3) {
|
|
var4 = Players.Players_pendingUpdateIndices[var3];
|
|
var5 = Client.players[var4];
|
|
var6 = var0.readUnsignedByte();
|
|
if ((var6 & 4) != 0) {
|
|
var6 += var0.readUnsignedByte() << 8;
|
|
}
|
|
|
|
byte var7 = -1;
|
|
if ((var6 & 512) != 0) {
|
|
var7 = var0.method6901();
|
|
}
|
|
|
|
if ((var6 & 256) != 0) {
|
|
var5.field1135 = var0.method6899();
|
|
var5.field1141 = var0.method6899();
|
|
var5.field1121 = var0.method6848();
|
|
var5.field1110 = var0.method6899();
|
|
var5.field1139 = var0.method6940() + Client.cycle;
|
|
var5.field1140 = var0.readUnsignedShort() + Client.cycle;
|
|
var5.field1101 = var0.readUnsignedShort();
|
|
if (var5.field1074) {
|
|
var5.field1135 += var5.tileX;
|
|
var5.field1141 += var5.tileY;
|
|
var5.field1121 += var5.tileX;
|
|
var5.field1110 += var5.tileY;
|
|
var5.pathLength = 0;
|
|
} else {
|
|
var5.field1135 += var5.pathX[0];
|
|
var5.field1141 += var5.pathY[0];
|
|
var5.field1121 += var5.pathX[0];
|
|
var5.field1110 += var5.pathY[0];
|
|
var5.pathLength = 1;
|
|
}
|
|
|
|
var5.field1152 = 0;
|
|
}
|
|
|
|
if ((var6 & 8192) != 0) {
|
|
Players.field1245[var4] = var0.method6899();
|
|
}
|
|
|
|
int var8;
|
|
int var9;
|
|
if ((var6 & 16) != 0) {
|
|
var8 = var0.method6940();
|
|
if (var8 == 65535) {
|
|
var8 = -1;
|
|
}
|
|
|
|
var9 = var0.method6844();
|
|
PacketWriter.performPlayerAnimation(var5, var8, var9);
|
|
}
|
|
|
|
if ((var6 & 32) != 0) {
|
|
var5.overheadText = var0.readStringCp1252NullTerminated();
|
|
if (var5.overheadText.charAt(0) == '~') {
|
|
var5.overheadText = var5.overheadText.substring(1);
|
|
SecureRandomCallable.addGameMessage(2, var5.username.getName(), var5.overheadText);
|
|
} else if (var5 == class129.localPlayer) {
|
|
SecureRandomCallable.addGameMessage(2, var5.username.getName(), var5.overheadText);
|
|
}
|
|
|
|
var5.isAutoChatting = false;
|
|
var5.overheadTextColor = 0;
|
|
var5.overheadTextEffect = 0;
|
|
var5.overheadTextCyclesRemaining = 150;
|
|
}
|
|
|
|
if ((var6 & 8) != 0) {
|
|
var5.targetIndex = var0.method6940();
|
|
if (var5.targetIndex == 65535) {
|
|
var5.targetIndex = -1;
|
|
}
|
|
}
|
|
|
|
int var11;
|
|
int var12;
|
|
int var15;
|
|
if ((var6 & 64) != 0) {
|
|
var8 = var0.method6940();
|
|
PlayerType var16 = (PlayerType)class260.findEnumerated(StructComposition.PlayerType_values(), var0.method6844());
|
|
boolean var10 = var0.readUnsignedByte() == 1;
|
|
var11 = var0.method6849();
|
|
var12 = var0.offset;
|
|
if (var5.username != null && var5.appearance != null) {
|
|
boolean var13 = false;
|
|
if (var16.isUser && class20.friendSystem.isIgnored(var5.username)) {
|
|
var13 = true;
|
|
}
|
|
|
|
if (!var13 && Client.field602 == 0 && !var5.isHidden) {
|
|
Players.field1255.offset = 0;
|
|
var0.method7010(Players.field1255.array, 0, var11);
|
|
Players.field1255.offset = 0;
|
|
String var14 = AbstractFont.escapeBrackets(class113.method2480(FloorDecoration.method4029(Players.field1255)));
|
|
var5.overheadText = var14.trim();
|
|
var5.overheadTextColor = var8 >> 8;
|
|
var5.overheadTextEffect = var8 & 255;
|
|
var5.overheadTextCyclesRemaining = 150;
|
|
var5.isAutoChatting = var10;
|
|
var5.field1108 = var5 != class129.localPlayer && var16.isUser && "" != Client.field647 && var14.toLowerCase().indexOf(Client.field647) == -1;
|
|
if (var16.isPrivileged) {
|
|
var15 = var10 ? 91 : 1;
|
|
} else {
|
|
var15 = var10 ? 90 : 2;
|
|
}
|
|
|
|
if (var16.modIcon != -1) {
|
|
SecureRandomCallable.addGameMessage(var15, ApproximateRouteStrategy.method1122(var16.modIcon) + var5.username.getName(), var14);
|
|
} else {
|
|
SecureRandomCallable.addGameMessage(var15, var5.username.getName(), var14);
|
|
}
|
|
}
|
|
}
|
|
|
|
var0.offset = var12 + var11;
|
|
}
|
|
|
|
if ((var6 & 2048) != 0) {
|
|
var5.spotAnimation = var0.method6853();
|
|
var8 = var0.readInt();
|
|
var5.field1134 = var8 >> 16;
|
|
var5.field1133 = (var8 & 65535) + Client.cycle;
|
|
var5.spotAnimationFrame = 0;
|
|
var5.spotAnimationFrameCycle = 0;
|
|
if (var5.field1133 > Client.cycle) {
|
|
var5.spotAnimationFrame = -1;
|
|
}
|
|
|
|
if (var5.spotAnimation == 65535) {
|
|
var5.spotAnimation = -1;
|
|
}
|
|
}
|
|
|
|
if ((var6 & 2) != 0) {
|
|
var8 = var0.readUnsignedByte();
|
|
byte[] var23 = new byte[var8];
|
|
Buffer var17 = new Buffer(var23);
|
|
var0.method7010(var23, 0, var8);
|
|
Players.field1246[var4] = var17;
|
|
var5.read(var17);
|
|
}
|
|
|
|
if ((var6 & 128) != 0) {
|
|
var5.field1096 = var0.method6853();
|
|
if (var5.pathLength == 0) {
|
|
var5.orientation = var5.field1096;
|
|
var5.field1096 = -1;
|
|
}
|
|
}
|
|
|
|
if ((var6 & 1) != 0) {
|
|
var8 = var0.method6844();
|
|
int var18;
|
|
int var20;
|
|
int var22;
|
|
if (var8 > 0) {
|
|
for (var9 = 0; var9 < var8; ++var9) {
|
|
var11 = -1;
|
|
var12 = -1;
|
|
var22 = -1;
|
|
var20 = var0.readUShortSmart();
|
|
if (var20 == 32767) {
|
|
var20 = var0.readUShortSmart();
|
|
var12 = var0.readUShortSmart();
|
|
var11 = var0.readUShortSmart();
|
|
var22 = var0.readUShortSmart();
|
|
} else if (var20 != 32766) {
|
|
var12 = var0.readUShortSmart();
|
|
} else {
|
|
var20 = -1;
|
|
}
|
|
|
|
var18 = var0.readUShortSmart();
|
|
var5.addHitSplat(var20, var12, var11, var22, Client.cycle, var18);
|
|
}
|
|
}
|
|
|
|
var9 = var0.readUnsignedByte();
|
|
if (var9 > 0) {
|
|
for (var20 = 0; var20 < var9; ++var20) {
|
|
var11 = var0.readUShortSmart();
|
|
var12 = var0.readUShortSmart();
|
|
if (var12 != 32767) {
|
|
var22 = var0.readUShortSmart();
|
|
var18 = var0.method6844();
|
|
var15 = var12 > 0 ? var0.method7007() : var18;
|
|
var5.addHealthBar(var11, Client.cycle, var12, var22, var18, var15);
|
|
} else {
|
|
var5.removeHealthBar(var11);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((var6 & 1024) != 0) {
|
|
for (var8 = 0; var8 < 3; ++var8) {
|
|
var5.actions[var8] = var0.readStringCp1252NullTerminated();
|
|
}
|
|
}
|
|
|
|
if (var5.field1074) {
|
|
if (var7 == 127) {
|
|
var5.resetPath(var5.tileX, var5.tileY);
|
|
} else {
|
|
byte var21;
|
|
if (var7 != -1) {
|
|
var21 = var7;
|
|
} else {
|
|
var21 = Players.field1245[var4];
|
|
}
|
|
|
|
var5.method2072(var5.tileX, var5.tileY, var21);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (var0.offset - var2 != var1) {
|
|
throw new RuntimeException(var0.offset - var2 + " " + var1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@ObfuscatedName("ew")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(B)Lno;",
|
|
garbageValue = "14"
|
|
)
|
|
@Export("getWorldMap")
|
|
static WorldMap getWorldMap() {
|
|
return class65.worldMap;
|
|
}
|
|
}
|