From 37a30d9fdac80704761074ecb924b57f2aec7767 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 13 Oct 2024 11:41:44 +0800 Subject: [PATCH] feat: ask with timeout --- net/src/main/java/com/zfoo/net/router/IRouter.java | 2 ++ net/src/main/java/com/zfoo/net/router/Router.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/net/src/main/java/com/zfoo/net/router/IRouter.java b/net/src/main/java/com/zfoo/net/router/IRouter.java index e5af9f8a..c4433b57 100644 --- a/net/src/main/java/com/zfoo/net/router/IRouter.java +++ b/net/src/main/java/com/zfoo/net/router/IRouter.java @@ -58,4 +58,6 @@ public interface IRouter { AsyncAnswer asyncAsk(Session session, Object packet, @Nullable Class answerClass, @Nullable Object argument); + AsyncAnswer asyncAsk(Session session, Object packet, @Nullable Class answerClass, @Nullable Object argument, long timeoutMillis); + } diff --git a/net/src/main/java/com/zfoo/net/router/Router.java b/net/src/main/java/com/zfoo/net/router/Router.java index 3b04a8da..94fa2e77 100644 --- a/net/src/main/java/com/zfoo/net/router/Router.java +++ b/net/src/main/java/com/zfoo/net/router/Router.java @@ -264,6 +264,11 @@ public class Router implements IRouter { */ @Override public AsyncAnswer asyncAsk(Session session, Object packet, @Nullable Class answerClass, @Nullable Object argument) { + return asyncAsk(session, packet, answerClass, argument, DEFAULT_TIMEOUT); + } + + @Override + public AsyncAnswer asyncAsk(Session session, Object packet, Class answerClass, Object argument, long timeoutMillis) { var clientSignalAttachment = new SignalAttachment(); if (argument == null) { @@ -281,7 +286,7 @@ public class Router implements IRouter { asyncAnswer.setSignalAttachment(clientSignalAttachment); clientSignalAttachment.getResponseFuture() - .completeOnTimeout(null, DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS) // 因此超时的情况,返回的是null + .completeOnTimeout(null, timeoutMillis, TimeUnit.MILLISECONDS) // 因此超时的情况,返回的是null .thenApply(answer -> { if (answer == null) { throw new NetTimeOutException("async ask [{}] timeout exception", packet.getClass().getSimpleName());