|
@@ -29,27 +29,23 @@ import java.util.function.Function;
|
|
|
@Slf4j
|
|
|
public class VertxTcpClient implements TcpClient {
|
|
|
|
|
|
+ @Getter
|
|
|
+ private final String id;
|
|
|
+ private final List<Runnable> disconnectListener = new CopyOnWriteArrayList<>();
|
|
|
+ private final EmitterProcessor<TcpMessage> processor = EmitterProcessor.create(false);
|
|
|
+ private final FluxSink<TcpMessage> sink = processor.sink(FluxSink.OverflowStrategy.BUFFER);
|
|
|
+ private final boolean serverClient;
|
|
|
public volatile NetClient client;
|
|
|
-
|
|
|
public NetSocket socket;
|
|
|
-
|
|
|
volatile PayloadParser payloadParser;
|
|
|
-
|
|
|
- @Getter
|
|
|
- private final String id;
|
|
|
-
|
|
|
@Setter
|
|
|
private long keepAliveTimeoutMs = Duration.ofMinutes(10).toMillis();
|
|
|
-
|
|
|
private volatile long lastKeepAliveTime = System.currentTimeMillis();
|
|
|
|
|
|
- private final List<Runnable> disconnectListener = new CopyOnWriteArrayList<>();
|
|
|
-
|
|
|
- private final EmitterProcessor<TcpMessage> processor = EmitterProcessor.create(false);
|
|
|
-
|
|
|
- private final FluxSink<TcpMessage> sink = processor.sink(FluxSink.OverflowStrategy.BUFFER);
|
|
|
-
|
|
|
- private final boolean serverClient;
|
|
|
+ public VertxTcpClient(String id, boolean serverClient) {
|
|
|
+ this.id = id;
|
|
|
+ this.serverClient = serverClient;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public void keepAlive() {
|
|
@@ -68,7 +64,6 @@ public class VertxTcpClient implements TcpClient {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public InetSocketAddress address() {
|
|
|
return getRemoteAddress();
|
|
@@ -77,7 +72,7 @@ public class VertxTcpClient implements TcpClient {
|
|
|
@Override
|
|
|
public Mono<Void> sendMessage(EncodedMessage message) {
|
|
|
return Mono
|
|
|
- .<Void>create((sink) -> {
|
|
|
+ .create((sink) -> {
|
|
|
if (socket == null) {
|
|
|
sink.error(new SocketException("socket closed"));
|
|
|
return;
|
|
@@ -116,11 +111,11 @@ public class VertxTcpClient implements TcpClient {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- public VertxTcpClient(String id,boolean serverClient) {
|
|
|
- this.id = id;
|
|
|
- this.serverClient=serverClient;
|
|
|
- }
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 接收TCP消息
|
|
|
+ *
|
|
|
+ * @param message TCP消息
|
|
|
+ */
|
|
|
protected void received(TcpMessage message) {
|
|
|
if (processor.getPending() > processor.getBufferSize() / 2) {
|
|
|
log.warn("tcp [{}] message pending {} ,drop message:{}", processor.getPending(), getRemoteAddress(), message.toString());
|
|
@@ -178,7 +173,7 @@ public class VertxTcpClient implements TcpClient {
|
|
|
execute(runnable);
|
|
|
}
|
|
|
disconnectListener.clear();
|
|
|
- if(serverClient){
|
|
|
+ if (serverClient) {
|
|
|
processor.onComplete();
|
|
|
}
|
|
|
}
|
|
@@ -191,6 +186,11 @@ public class VertxTcpClient implements TcpClient {
|
|
|
this.client = client;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设置客户端消息解析器
|
|
|
+ *
|
|
|
+ * @param payloadParser 消息解析器
|
|
|
+ */
|
|
|
public void setRecordParser(PayloadParser payloadParser) {
|
|
|
synchronized (this) {
|
|
|
if (null != this.payloadParser && this.payloadParser != payloadParser) {
|
|
@@ -206,6 +206,11 @@ public class VertxTcpClient implements TcpClient {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * socket处理
|
|
|
+ *
|
|
|
+ * @param socket socket
|
|
|
+ */
|
|
|
public void setSocket(NetSocket socket) {
|
|
|
synchronized (this) {
|
|
|
Objects.requireNonNull(payloadParser);
|