云服务 v8.0.9版本的 MD5 值为:db7bd2ef285263bf7b9aed6242608c24
以下内容为反编译后的 BioReadWriteProcessor.java 源代码,内容仅作参考
package com.open.net.client.impl.tcp.bio.processor;
import com.open.net.client.impl.tcp.bio.BioConnectListener;
import com.open.net.client.structures.BaseClient;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class BioReadWriteProcessor {
private static int G_SOCKET_ID;
private long connect_timeout;
private BaseClient mClient;
private ConnectRunnable mConnectProcessor;
private BioConnectListener mConnectStatusListener;
private String mIp;
private int mPort;
private ReadRunnable mReadProcessor;
private int mSocketId;
private WriteRunnable mWriteProcessor;
private String TAG = "BioReadWriteProcessor";
private Socket mSocket = null;
private OutputStream mOutputStream = null;
private InputStream mInputStream = null;
private Thread mConnectThread = null;
private Thread mWriteThread = null;
private Thread mReadThread = null;
private int r_w_count = 2;
public BioReadWriteProcessor(String str, int i, long j, BaseClient baseClient, BioConnectListener bioConnectListener) {
this.mIp = "192.168.1.1";
this.mPort = 9999;
this.connect_timeout = 10000L;
int i2 = G_SOCKET_ID + 1;
G_SOCKET_ID = i2;
this.mSocketId = i2;
this.mIp = str;
this.mPort = i;
this.connect_timeout = j;
this.mClient = baseClient;
this.mConnectStatusListener = bioConnectListener;
}
public void start() {
this.mConnectProcessor = new ConnectRunnable();
Thread thread = new Thread(this.mConnectProcessor);
this.mConnectThread = thread;
thread.start();
}
public synchronized void close() {
wakeUp();
try {
OutputStream outputStream = this.mOutputStream;
if (outputStream != null) {
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
this.mOutputStream = null;
try {
InputStream inputStream = this.mInputStream;
if (inputStream != null) {
inputStream.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
this.mInputStream = null;
try {
Socket socket = this.mSocket;
if (socket != null) {
socket.close();
}
} catch (Exception e3) {
e3.printStackTrace();
}
this.mSocket = null;
try {
Thread thread = this.mWriteThread;
if (thread != null && thread.isAlive()) {
this.mWriteThread.interrupt();
}
} catch (Exception e4) {
e4.printStackTrace();
}
this.mWriteThread = null;
try {
Thread thread2 = this.mReadThread;
if (thread2 != null && thread2.isAlive()) {
this.mReadThread.interrupt();
}
} catch (Exception e5) {
e5.printStackTrace();
}
this.mReadThread = null;
}
public void wakeUp() {
WriteRunnable writeRunnable = this.mWriteProcessor;
if (writeRunnable != null) {
writeRunnable.wakeup();
}
}
public synchronized void onSocketExit(int i) {
BioConnectListener bioConnectListener;
int i2 = this.r_w_count - 1;
this.r_w_count = i2;
boolean z = i2 <= 0;
PrintStream printStream = System.out;
StringBuilder sb = new StringBuilder();
sb.append(this.TAG);
sb.append("onSocketExit mSocketId ");
sb.append(this.mSocketId);
sb.append(" exit_code ");
sb.append(i);
sb.append(i == 1 ? " onWrite" : " onRead");
sb.append(" isWriterReaderExit ");
sb.append(z);
printStream.println(sb.toString());
close();
if (z && (bioConnectListener = this.mConnectStatusListener) != null) {
bioConnectListener.onConnectFailed(this);
}
}
private class ConnectRunnable implements Runnable {
private ConnectRunnable() {
}
@Override
public void run() {
boolean z;
try {
BioReadWriteProcessor.this.mSocket = new Socket();
BioReadWriteProcessor.this.mSocket.connect(new InetSocketAddress(BioReadWriteProcessor.this.mIp, BioReadWriteProcessor.this.mPort), (int) BioReadWriteProcessor.this.connect_timeout);
BioReadWriteProcessor bioReadWriteProcessor = BioReadWriteProcessor.this;
bioReadWriteProcessor.mOutputStream = bioReadWriteProcessor.mSocket.getOutputStream();
BioReadWriteProcessor bioReadWriteProcessor2 = BioReadWriteProcessor.this;
bioReadWriteProcessor2.mInputStream = bioReadWriteProcessor2.mSocket.getInputStream();
BioReadWriteProcessor bioReadWriteProcessor3 = BioReadWriteProcessor.this;
bioReadWriteProcessor3.mWriteProcessor = new WriteRunnable();
BioReadWriteProcessor bioReadWriteProcessor4 = BioReadWriteProcessor.this;
bioReadWriteProcessor4.mReadProcessor = new ReadRunnable();
BioReadWriteProcessor.this.mWriteThread = new Thread(BioReadWriteProcessor.this.mWriteProcessor);
BioReadWriteProcessor.this.mReadThread = new Thread(BioReadWriteProcessor.this.mReadProcessor);
BioReadWriteProcessor.this.mWriteThread.start();
BioReadWriteProcessor.this.mReadThread.start();
if (BioReadWriteProcessor.this.mConnectStatusListener != null) {
BioConnectListener bioConnectListener = BioReadWriteProcessor.this.mConnectStatusListener;
BioReadWriteProcessor bioReadWriteProcessor5 = BioReadWriteProcessor.this;
bioConnectListener.onConnectSuccess(bioReadWriteProcessor5, bioReadWriteProcessor5.mOutputStream, BioReadWriteProcessor.this.mInputStream);
}
z = true;
} catch (Exception e) {
e.printStackTrace();
z = false;
}
if (z || BioReadWriteProcessor.this.mConnectStatusListener == null) {
return;
}
BioReadWriteProcessor.this.mConnectStatusListener.onConnectFailed(BioReadWriteProcessor.this);
}
}
public class WriteRunnable implements Runnable {
private final Object lock;
private WriteRunnable() {
this.lock = new Object();
}
public void wakeup() {
synchronized (this.lock) {
this.lock.notifyAll();
}
}
@Override
public void run() {
while (BioReadWriteProcessor.this.mClient.onWrite()) {
try {
synchronized (this.lock) {
this.lock.wait();
}
} catch (Exception e) {
e.printStackTrace();
}
}
BioReadWriteProcessor.this.onSocketExit(1);
}
}
private class ReadRunnable implements Runnable {
private ReadRunnable() {
}
@Override
public void run() {
BioReadWriteProcessor.this.mClient.onRead();
BioReadWriteProcessor.this.onSocketExit(2);
}
}
}