84 lines
2.2 KiB
Java
84 lines
2.2 KiB
Java
package org.kne.cloud.network;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.net.*;
|
|
import java.nio.channels.SocketChannel;
|
|
import java.util.concurrent.locks.LockSupport;
|
|
|
|
import org.kne.cloud.network.klalb.CannotAssociateException;
|
|
import org.kne.cloud.network.klalb.KLALBVirtualSocket;
|
|
import org.kne.cloud.network.klalb.KLALBVirtualSocketChannel;
|
|
import org.kne.io.Task;
|
|
public class SocketChannelBridge extends Task{
|
|
protected SocketChannel a;
|
|
protected SocketChannel b;
|
|
protected ChannelBridge bridgeAB;
|
|
protected ChannelBridge bridgeBA;
|
|
public ChannelBridge getBridgeAB() {
|
|
return bridgeAB;
|
|
}
|
|
public ChannelBridge getBridgeBA() {
|
|
return bridgeBA;
|
|
}
|
|
public SocketChannelBridge(SocketChannel a, SocketChannel b) throws IOException {
|
|
super();
|
|
this.a = a;
|
|
this.b = b;
|
|
createStreamChannelBridge();
|
|
}
|
|
protected void createStreamChannelBridge() throws IOException {
|
|
bridgeAB = new ChannelBridge(a, b);
|
|
bridgeBA = new ChannelBridge(b, a);
|
|
}
|
|
@Override
|
|
protected void runTask() {
|
|
try {
|
|
|
|
Thread ta=bridgeAB.runAtNewThread("SocketBridge A->B thread");
|
|
Thread tb=bridgeBA.runAtNewThread("SocketBridge B->A thread");
|
|
while((ta.isAlive()||tb.isAlive())&&a.isOpen()&&b.isOpen()) {
|
|
LockSupport.parkNanos(1000000L);
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}finally {
|
|
//new Exception().printStackTrace();
|
|
try {
|
|
a.close();
|
|
//System.out.println("closeA");
|
|
} catch (IOException e) {
|
|
// TODO 自动生成的 catch 块
|
|
e.printStackTrace();
|
|
}
|
|
try {
|
|
b.close();
|
|
//System.out.println("closeB");
|
|
} catch (IOException e) {
|
|
// TODO 自动生成的 catch 块
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
public SocketChannel getA() {
|
|
return a;
|
|
}
|
|
public SocketChannel getB() {
|
|
return b;
|
|
}
|
|
/*protected OutputStream getBOUT() throws IOException {
|
|
return b.getOutputStream();
|
|
}
|
|
protected InputStream getBIN() throws IOException {
|
|
return b.getInputStream();
|
|
}
|
|
protected OutputStream getAOUT() throws IOException {
|
|
return a.getOutputStream();
|
|
}
|
|
protected InputStream getAIN() throws IOException {
|
|
return a.getInputStream();
|
|
}*/
|
|
|
|
}
|