Jelajahi Sumber

ActorMessageDispatcherComponent加上ResponseType的检查,handler的request跟response要跟消息proto中定义的一致

tanghai 4 tahun lalu
induk
melakukan
35f533d376

+ 1 - 1
README.md

@@ -8,7 +8,7 @@
 1. Hotfix跟HotfixView是纯逻辑的,类中不要带有任何字段,否则热更就会丢失
 1. Hotfix跟HotfixView是纯逻辑的,类中不要带有任何字段,否则热更就会丢失
 2. ETTask跟要么调用Coroutine要么就await,打开VS中的错误列表窗口,没有使用这两种的会报出问题,虽然既不await也不Coroutine的话能够编译通过,但是会丢失异常,十分危险
 2. ETTask跟要么调用Coroutine要么就await,打开VS中的错误列表窗口,没有使用这两种的会报出问题,虽然既不await也不Coroutine的话能够编译通过,但是会丢失异常,十分危险
 3. 请不要使用任何虚函数,用逻辑分发替代
 3. 请不要使用任何虚函数,用逻辑分发替代
-4. 请不要使用任何继承,除了继承Entity,用组替代
+4. 请不要使用任何继承,除了继承Entity,用组替代
 
 
 
 
 # ET6 发布!ET6相比ET5有巨大变化,可以说是凤姐变亦菲,6.0拥有如下惊人的特点
 # ET6 发布!ET6相比ET5有巨大变化,可以说是凤姐变亦菲,6.0拥有如下惊人的特点

+ 8 - 0
Server/Hotfix/Module/Actor/ActorMessageDispatcherComponentSystem.cs

@@ -57,6 +57,14 @@ namespace ET
                 }
                 }
 
 
                 Type messageType = imHandler.GetRequestType();
                 Type messageType = imHandler.GetRequestType();
+                Type responseType = OpcodeTypeComponent.Instance.GetResponseType(messageType);
+
+                Type handleResponseType = imHandler.GetResponseType();
+                if (handleResponseType != null && handleResponseType != responseType)
+                {
+                    throw new Exception($"message handler response type error: {messageType.FullName}");
+                }
+                
                 self.ActorMessageHandlers.Add(messageType, imHandler);
                 self.ActorMessageHandlers.Add(messageType, imHandler);
             }
             }
         }
         }