ref[net]: no argument sync ask is executed in same thread pool executor

This commit is contained in:
godotg
2023-09-10 15:33:10 +08:00
parent 24f1932bd2
commit 7e2c507d61
2 changed files with 20 additions and 9 deletions
@@ -90,10 +90,12 @@ public class Router implements IRouter {
if (signalAttachment.getClient() == SignalAttachment.SIGNAL_OUTSIDE_CLIENT) {
// 服务器收到外部客户端的SIGNAL_OUTSIDE_CLIENT,不做任何处理
TaskBus.dispatchBySession(task);
} else if (signalAttachment.getClient() == SignalAttachment.SIGNAL_NATIVE_CLIENT) {
// 服务器收到signalAttachment,不做任何处理
} else if (signalAttachment.getClient() == SignalAttachment.SIGNAL_NATIVE_ARGUMENT_CLIENT) {
signalAttachment.setClient(SignalAttachment.SIGNAL_SERVER);
TaskBus.dispatchByTaskExecutorHash(signalAttachment.getTaskExecutorHash(), task);
} else if (signalAttachment.getClient() == SignalAttachment.SIGNAL_NATIVE_NO_ARGUMENT_CLIENT) {
signalAttachment.setClient(SignalAttachment.SIGNAL_SERVER);
TaskBus.dispatchBySession(task);
} else {
// 客户端收到服务器应答,客户端发送的时候client为SIGNAL_NATIVE_CLIENT,服务器收到的时候将其设置为SIGNAL_SERVER
var removedAttachment = (SignalAttachment) SignalBridge.removeSignalAttachment(signalAttachment);
@@ -183,8 +185,12 @@ public class Router implements IRouter {
@Override
public <T> SyncAnswer<T> syncAsk(Session session, Object packet, @Nullable Class<T> answerClass, @Nullable Object argument) throws Exception {
var clientSignalAttachment = new SignalAttachment();
var taskExecutorHash = TaskBus.calTaskExecutorHash(argument);
clientSignalAttachment.setTaskExecutorHash(taskExecutorHash);
if (argument == null) {
clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_NO_ARGUMENT_CLIENT);
} else {
clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_ARGUMENT_CLIENT);
clientSignalAttachment.setTaskExecutorHash(TaskBus.calTaskExecutorHash(argument));
}
try {
SignalBridge.addSignalAttachment(clientSignalAttachment);
@@ -220,9 +226,13 @@ public class Router implements IRouter {
@Override
public <T> AsyncAnswer<T> asyncAsk(Session session, Object packet, @Nullable Class<T> answerClass, @Nullable Object argument) {
var clientSignalAttachment = new SignalAttachment();
var taskExecutorHash = TaskBus.calTaskExecutorHash(argument);
clientSignalAttachment.setTaskExecutorHash(taskExecutorHash);
if (argument == null) {
clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_NO_ARGUMENT_CLIENT);
} else {
clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_ARGUMENT_CLIENT);
clientSignalAttachment.setTaskExecutorHash(TaskBus.calTaskExecutorHash(argument));
}
// 服务器在同步或异步的消息处理中,又调用了同步或异步的方法,这时候threadReceiverAttachment不为空
var serverSignalAttachment = serverReceiverAttachmentThreadLocal.get();
@@ -37,8 +37,9 @@ public class SignalAttachment {
* 0 for the server, 1 for the sync or async native client, 2 for the outside client such as browser, mobile
*/
public static final byte SIGNAL_SERVER = 0;
public static final byte SIGNAL_NATIVE_CLIENT = 1;
public static final byte SIGNAL_OUTSIDE_CLIENT = 2;
public static final byte SIGNAL_NATIVE_ARGUMENT_CLIENT = 1;
public static final byte SIGNAL_NATIVE_NO_ARGUMENT_CLIENT = 2;
public static final byte SIGNAL_OUTSIDE_CLIENT = 12;
/**
* EN:Unique identification of a packet, unique representation of an attachment, hashcode() and equals() equals signalId value
@@ -55,7 +56,7 @@ public class SignalAttachment {
/**
* 0 for the server, 1 for the sync or async native client, 2 for the outside client such as browser, mobile
*/
private byte client = SIGNAL_NATIVE_CLIENT;
private byte client = SIGNAL_NATIVE_ARGUMENT_CLIENT;
/**
* The timestamp the client sent it