This commit is contained in:
@@ -25,43 +25,47 @@ import org.redkale.util.*;
|
||||
*/
|
||||
public abstract class AsyncConnection implements AutoCloseable {
|
||||
|
||||
protected SSLContext sslContext;
|
||||
private SSLContext sslContext;
|
||||
|
||||
protected Map<String, Object> attributes; //用于存储绑定在Connection上的对象集合
|
||||
private Map<String, Object> attributes; //用于存储绑定在Connection上的对象集合
|
||||
|
||||
protected Object subobject; //用于存储绑定在Connection上的对象, 同attributes, 只绑定单个对象时尽量使用subobject而非attributes
|
||||
private Object subobject; //用于存储绑定在Connection上的对象, 同attributes, 只绑定单个对象时尽量使用subobject而非attributes
|
||||
|
||||
protected volatile long readtime;
|
||||
|
||||
protected volatile long writetime;
|
||||
|
||||
protected final Supplier<ByteBuffer> bufferSupplier;
|
||||
private final Supplier<ByteBuffer> bufferSupplier;
|
||||
|
||||
protected final Consumer<ByteBuffer> bufferConsumer;
|
||||
private final Consumer<ByteBuffer> bufferConsumer;
|
||||
|
||||
private ByteBuffer readBuffer;
|
||||
|
||||
//在线数
|
||||
protected AtomicLong livingCounter;
|
||||
private AtomicLong livingCounter;
|
||||
|
||||
//关闭数
|
||||
protected AtomicLong closedCounter;
|
||||
private AtomicLong closedCounter;
|
||||
|
||||
protected Consumer<AsyncConnection> beforeCloseListener;
|
||||
private Consumer<AsyncConnection> beforeCloseListener;
|
||||
|
||||
//关联的事件数, 小于1表示没有事件
|
||||
protected final AtomicInteger eventing = new AtomicInteger();
|
||||
private final AtomicInteger eventing = new AtomicInteger();
|
||||
|
||||
protected AsyncConnection(ObjectPool<ByteBuffer> bufferPool, SSLContext sslContext) {
|
||||
this(bufferPool, bufferPool, sslContext);
|
||||
protected AsyncConnection(ObjectPool<ByteBuffer> bufferPool, SSLContext sslContext,
|
||||
final AtomicLong livingCounter, final AtomicLong closedCounter) {
|
||||
this(bufferPool, bufferPool, sslContext, livingCounter, closedCounter);
|
||||
}
|
||||
|
||||
protected AsyncConnection(Supplier<ByteBuffer> bufferSupplier, Consumer<ByteBuffer> bufferConsumer, SSLContext sslContext) {
|
||||
protected AsyncConnection(Supplier<ByteBuffer> bufferSupplier, Consumer<ByteBuffer> bufferConsumer, SSLContext sslContext,
|
||||
final AtomicLong livingCounter, final AtomicLong closedCounter) {
|
||||
Objects.requireNonNull(bufferSupplier);
|
||||
Objects.requireNonNull(bufferConsumer);
|
||||
this.bufferSupplier = bufferSupplier;
|
||||
this.bufferConsumer = bufferConsumer;
|
||||
this.sslContext = sslContext;
|
||||
this.livingCounter = livingCounter;
|
||||
this.closedCounter = closedCounter;
|
||||
}
|
||||
|
||||
public Supplier<ByteBuffer> getBufferSupplier() {
|
||||
|
||||
@@ -223,7 +223,7 @@ public abstract class Response<C extends Context, R extends Request<C>> {
|
||||
public void finish(final byte[] bs) {
|
||||
if (!this.inited) return; //避免重复关闭
|
||||
if (this.context.bufferCapacity == bs.length) {
|
||||
ByteBuffer buffer = channel.bufferSupplier.get();
|
||||
ByteBuffer buffer = channel.getBufferSupplier().get();
|
||||
buffer.put(bs);
|
||||
buffer.flip();
|
||||
this.finish(buffer);
|
||||
|
||||
@@ -39,7 +39,7 @@ class TcpAioAsyncConnection extends AsyncConnection {
|
||||
final AsynchronousSocketChannel ch, final SSLContext sslContext, final SocketAddress addr0,
|
||||
final int readTimeoutSeconds, final int writeTimeoutSeconds,
|
||||
final AtomicLong livingCounter, final AtomicLong closedCounter) {
|
||||
super(bufferSupplier, bufferConsumer, sslContext);
|
||||
super(bufferSupplier, bufferConsumer, sslContext, livingCounter, closedCounter);
|
||||
this.channel = ch;
|
||||
this.readTimeoutSeconds = readTimeoutSeconds;
|
||||
this.writeTimeoutSeconds = writeTimeoutSeconds;
|
||||
@@ -52,8 +52,6 @@ class TcpAioAsyncConnection extends AsyncConnection {
|
||||
}
|
||||
}
|
||||
this.remoteAddress = addr;
|
||||
this.livingCounter = livingCounter;
|
||||
this.closedCounter = closedCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -37,7 +37,7 @@ class UdpBioAsyncConnection extends AsyncConnection {
|
||||
final DatagramChannel ch, final SSLContext sslContext, SocketAddress addr0, final boolean client0,
|
||||
final int readTimeoutSeconds0, final int writeTimeoutSeconds0,
|
||||
final AtomicLong livingCounter, final AtomicLong closedCounter) {
|
||||
super(bufferSupplier, bufferConsumer, sslContext);
|
||||
super(bufferSupplier, bufferConsumer, sslContext, livingCounter, closedCounter);
|
||||
this.channel = ch;
|
||||
this.client = client0;
|
||||
this.readTimeoutSeconds = readTimeoutSeconds0;
|
||||
@@ -51,8 +51,6 @@ class UdpBioAsyncConnection extends AsyncConnection {
|
||||
}
|
||||
}
|
||||
this.remoteAddress = addr;
|
||||
this.livingCounter = livingCounter;
|
||||
this.closedCounter = closedCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,6 +11,7 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.channels.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.function.*;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import org.redkale.net.AsyncConnection;
|
||||
@@ -67,9 +68,10 @@ class TcpNioAsyncConnection extends AsyncConnection {
|
||||
|
||||
private SelectionKey writeKey;
|
||||
|
||||
public TcpNioAsyncConnection(NioThreadGroup ioGroup, NioThread ioThread, ExecutorService workExecutor, ObjectPool<ByteBuffer> bufferPool, SocketChannel ch,
|
||||
SSLContext sslContext, final SocketAddress addr0) {
|
||||
super(bufferPool, sslContext);
|
||||
public TcpNioAsyncConnection(NioThreadGroup ioGroup, NioThread ioThread, ExecutorService workExecutor,
|
||||
ObjectPool<ByteBuffer> bufferPool, SocketChannel ch,
|
||||
SSLContext sslContext, final SocketAddress addr0, AtomicLong livingCounter, AtomicLong closedCounter) {
|
||||
super(bufferPool, sslContext, livingCounter, closedCounter);
|
||||
this.ioGroup = ioGroup;
|
||||
this.ioThread = ioThread;
|
||||
this.workExecutor = workExecutor;
|
||||
@@ -85,9 +87,11 @@ class TcpNioAsyncConnection extends AsyncConnection {
|
||||
this.remoteAddress = addr;
|
||||
}
|
||||
|
||||
public TcpNioAsyncConnection(NioThreadGroup ioGroup, NioThread ioThread, ExecutorService workExecutor, Supplier<ByteBuffer> bufferSupplier, Consumer<ByteBuffer> bufferConsumer,
|
||||
SocketChannel ch, SSLContext sslContext, final SocketAddress addr0) {
|
||||
super(bufferSupplier, bufferConsumer, sslContext);
|
||||
public TcpNioAsyncConnection(NioThreadGroup ioGroup, NioThread ioThread, ExecutorService workExecutor,
|
||||
Supplier<ByteBuffer> bufferSupplier, Consumer<ByteBuffer> bufferConsumer,
|
||||
SocketChannel ch, SSLContext sslContext, final SocketAddress addr0,
|
||||
AtomicLong livingCounter, AtomicLong closedCounter) {
|
||||
super(bufferSupplier, bufferConsumer, sslContext, livingCounter, closedCounter);
|
||||
this.ioGroup = ioGroup;
|
||||
this.ioThread = ioThread;
|
||||
this.workExecutor = workExecutor;
|
||||
|
||||
Reference in New Issue
Block a user