Files
2006Scape/2006Redone Client/src/RSSocket.java
T
2019-06-18 15:04:35 -04:00

169 lines
3.6 KiB
Java

// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
final class RSSocket implements Runnable {
public RSSocket(RSApplet RSApplet_, Socket socket1) throws IOException {
closed = false;
isWriter = false;
hasIOError = false;
rsApplet = RSApplet_;
socket = socket1;
socket.setSoTimeout(30000);
socket.setTcpNoDelay(true);
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
}
public void close() {
closed = true;
try {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException _ex) {
System.out.println("Error closing stream");
}
isWriter = false;
synchronized (this) {
notify();
}
buffer = null;
}
public int read() throws IOException {
if (closed) {
return 0;
} else {
return inputStream.read();
}
}
public int available() throws IOException {
if (closed) {
return 0;
} else {
return inputStream.available();
}
}
public void flushInputStream(byte abyte0[], int j) throws IOException {
int i = 0;// was parameter
if (closed) {
return;
}
int k;
for (; j > 0; j -= k) {
k = inputStream.read(abyte0, i, j);
if (k <= 0) {
throw new IOException("EOF");
}
i += k;
}
}
public void queueBytes(int i, byte abyte0[]) throws IOException {
if (closed) {
return;
}
if (hasIOError) {
hasIOError = false;
throw new IOException("Error in writer thread");
}
if (buffer == null) {
buffer = new byte[5000];
}
synchronized (this) {
for (int l = 0; l < i; l++) {
buffer[buffIndex] = abyte0[l];
buffIndex = (buffIndex + 1) % 5000;
if (buffIndex == (writeIndex + 4900) % 5000) {
throw new IOException("buffer overflow");
}
}
if (!isWriter) {
isWriter = true;
rsApplet.startRunnable(this, 3);
}
notify();
}
}
@Override
public void run() {
while (isWriter) {
int i;
int j;
synchronized (this) {
if (buffIndex == writeIndex) {
try {
wait();
} catch (InterruptedException _ex) {
}
}
if (!isWriter) {
return;
}
j = writeIndex;
if (buffIndex >= writeIndex) {
i = buffIndex - writeIndex;
} else {
i = 5000 - writeIndex;
}
}
if (i > 0) {
try {
outputStream.write(buffer, j, i);
} catch (IOException _ex) {
hasIOError = true;
}
writeIndex = (writeIndex + i) % 5000;
try {
if (buffIndex == writeIndex) {
outputStream.flush();
}
} catch (IOException _ex) {
hasIOError = true;
}
}
}
}
public void printDebug() {
System.out.println("dummy:" + closed);
System.out.println("tcycl:" + writeIndex);
System.out.println("tnum:" + buffIndex);
System.out.println("writer:" + isWriter);
System.out.println("ioerror:" + hasIOError);
try {
System.out.println("available:" + available());
} catch (IOException _ex) {
}
}
private InputStream inputStream;
private OutputStream outputStream;
private final Socket socket;
private boolean closed;
private final RSApplet rsApplet;
private byte[] buffer;
private int writeIndex;
private int buffIndex;
private boolean isWriter;
private boolean hasIOError;
}