Переглянути джерело

发送actor消息,有可能纤程不存在,这个时候需要返回response ErrorCore.ERR_NotFoundActor

tanghai 2 роки тому
батько
коміт
2a91f58426

+ 10 - 6
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ProcessInnerSenderSystem.cs

@@ -96,7 +96,7 @@ namespace ET
             self.SendInner(actorId, (MessageObject)message);
         }
 
-        private static void SendInner(this ProcessInnerSender self, ActorId actorId, MessageObject message)
+        private static bool SendInner(this ProcessInnerSender self, ActorId actorId, MessageObject message)
         {
             Fiber fiber = self.Fiber();
             
@@ -109,10 +109,10 @@ namespace ET
             if (actorId.Fiber == fiber.Id)
             {
                 self.HandleMessage(fiber, new MessageInfo() {ActorId = actorId, MessageObject = message});
-                return;
+                return true;
             }
             
-            MessageQueue.Instance.Send(fiber.Address, actorId, message);
+            return MessageQueue.Instance.Send(fiber.Address, actorId, message);
         }
 
         public static int GetRpcId(this ProcessInnerSender self)
@@ -159,9 +159,13 @@ namespace ET
             Type requestType = iRequest.GetType();
             MessageSenderStruct messageSenderStruct = new(actorId, requestType, needException);
             self.requestCallback.Add(rpcId, messageSenderStruct);
-            
-            self.SendInner(actorId, (MessageObject)iRequest);
 
+            IResponse response;
+            if (!self.SendInner(actorId, (MessageObject)iRequest))  // 纤程不存在
+            {
+                response = MessageHelper.CreateResponse(requestType, rpcId, ErrorCore.ERR_NotFoundActor);
+                return response;
+            }
             
             async ETTask Timeout()
             {
@@ -187,7 +191,7 @@ namespace ET
             
             long beginTime = TimeInfo.Instance.ServerFrameTime();
 
-            IResponse response = await messageSenderStruct.Wait();
+            response = await messageSenderStruct.Wait();
             
             long endTime = TimeInfo.Instance.ServerFrameTime();
 

+ 5 - 4
Unity/Assets/Scripts/Core/World/Module/Actor/MessageQueue.cs

@@ -17,9 +17,9 @@ namespace ET
         {
         }
 
-        public void Send(ActorId actorId, MessageObject messageObject)
+        public bool Send(ActorId actorId, MessageObject messageObject)
         {
-            this.Send(actorId.Address, actorId, messageObject);
+            return this.Send(actorId.Address, actorId, messageObject);
         }
         
         public void Reply(ActorId actorId, MessageObject messageObject)
@@ -27,13 +27,14 @@ namespace ET
             this.Send(actorId.Address, actorId, messageObject);
         }
         
-        public void Send(Address fromAddress, ActorId actorId, MessageObject messageObject)
+        public bool Send(Address fromAddress, ActorId actorId, MessageObject messageObject)
         {
             if (!this.messages.TryGetValue(actorId.Address.Fiber, out var queue))
             {
-                return;
+                return false;
             }
             queue.Enqueue(new MessageInfo() {ActorId = new ActorId(fromAddress, actorId.InstanceId), MessageObject = messageObject});
+            return true;
         }
         
         public void Fetch(int fiberId, int count, List<MessageInfo> list)