mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-18 04:28:40 +00:00
feat: ask with timeout
This commit is contained in:
@@ -58,4 +58,6 @@ public interface IRouter {
|
||||
|
||||
<T> AsyncAnswer<T> asyncAsk(Session session, Object packet, @Nullable Class<T> answerClass, @Nullable Object argument);
|
||||
|
||||
<T> AsyncAnswer<T> asyncAsk(Session session, Object packet, @Nullable Class<T> answerClass, @Nullable Object argument, long timeoutMillis);
|
||||
|
||||
}
|
||||
|
||||
@@ -264,6 +264,11 @@ public class Router implements IRouter {
|
||||
*/
|
||||
@Override
|
||||
public <T> AsyncAnswer<T> asyncAsk(Session session, Object packet, @Nullable Class<T> answerClass, @Nullable Object argument) {
|
||||
return asyncAsk(session, packet, answerClass, argument, DEFAULT_TIMEOUT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> AsyncAnswer<T> asyncAsk(Session session, Object packet, Class<T> 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());
|
||||
|
||||
Reference in New Issue
Block a user