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

想了一下,纤程之间还是不方便做直接发送消息,有需要另外写个组件好了

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

+ 0 - 33
Unity/Assets/Scripts/Hotfix/Server/Module/Message/ProcessOuterSenderOnReadInvoker_Mailbox.cs

@@ -1,33 +0,0 @@
-using System;
-
-namespace ET.Server
-{
-    [Invoke(ProcessOuterSenderInvokerType.Mailbox)]
-    public class ProcessOuterSenderOnReadInvoker_Mailbox: AInvokeHandler<ProcessOuterSenderOnRead>
-    {
-        public override void Handle(ProcessOuterSenderOnRead args)
-        {
-            ProcessOuterSender processOuterSender = args.ProcessOuterSender;
-            Fiber fiber = processOuterSender.Fiber();
-            ActorId actorId = args.ActorId;
-            MessageObject message = (MessageObject)args.Message;
-            
-            int fromProcess = actorId.Process;
-            actorId.Process = fiber.Process;
-            
-            MailBoxComponent mailBoxComponent = fiber.Mailboxes.Get(actorId.InstanceId);
-            if (mailBoxComponent == null)
-            {
-                fiber.Warning($"actor not found mailbox, from: {actorId} current: {fiber.Address} {message}");
-                if (message is IRequest request)
-                {
-                    IResponse resp = MessageHelper.CreateResponse(request, ErrorCore.ERR_NotFoundActor);
-                    processOuterSender.Send(new ActorId(fromProcess, 0), resp);
-                }
-                message.Dispose();
-                return;
-            }
-            mailBoxComponent.Add(actorId.Address, message);
-        }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Hotfix/Server/Module/Message/ProcessOuterSenderOnReadInvoker_Mailbox.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 272b198e3d93d5e4b84633d8e95c2587
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 25 - 26
Unity/Assets/Scripts/Hotfix/Server/Module/Message/ProcessOuterSenderSystem.cs

@@ -27,31 +27,8 @@ namespace ET.Server
             self.AService.AcceptCallback = self.OnAccept;
             self.AService.ReadCallback = self.OnRead;
             self.AService.ErrorCallback = self.OnError;
-            self.InvokerType = ProcessOuterSenderInvokerType.Mailbox;
         }
         
-        [EntitySystem]
-        private static void Awake(this ProcessOuterSender self, IPEndPoint address, int invokerType)
-        {
-            switch (self.InnerProtocol)
-            {
-                case NetworkProtocol.TCP:
-                {
-                    self.AService = new TService(address, ServiceType.Inner, self.Fiber().Log);
-                    break;
-                }
-                case NetworkProtocol.KCP:
-                {
-                    self.AService = new KService(address, ServiceType.Inner, self.Fiber().Log);
-                    break;
-                }
-            }
-                
-            self.AService.AcceptCallback = self.OnAccept;
-            self.AService.ReadCallback = self.OnRead;
-            self.AService.ErrorCallback = self.OnError;
-            self.InvokerType = invokerType;
-        }
         
         [EntitySystem]
         private static void Update(this ProcessOuterSender self)
@@ -81,10 +58,32 @@ namespace ET.Server
                 return;
             }
 
-            EventSystem.Instance.Invoke(self.InvokerType, new ProcessOuterSenderOnRead()
+            Fiber fiber = self.Fiber();
+            int fromProcess = actorId.Process;
+            actorId.Process = fiber.Process;
+
+            switch (message)
             {
-                ProcessOuterSender = self, ActorId = actorId, Message = message
-            });
+                case ILocationRequest:
+                case IRequest:
+                {
+                    async ETTask Call()
+                    {
+                        IRequest request = (IRequest)message;
+                        // 注意这里都不能抛异常,因为这里只是中转消息
+                        IResponse response = await fiber.ProcessInnerSender.Call(actorId, request, false);
+                        actorId.Process = fromProcess;
+                        self.Send(actorId, response);
+                    }
+                    Call().Coroutine();
+                    break;
+                }
+                default:
+                {
+                    fiber.ProcessInnerSender.Send(actorId, (IMessage)message);
+                    break;
+                }
+            }
         }
 
         private static void OnError(this ProcessOuterSender self, long channelId, int error)

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Module/NetInner/FiberInit_NetInner.cs

@@ -12,7 +12,7 @@ namespace ET.Server
             root.AddComponent<TimerComponent>();
             root.AddComponent<CoroutineLockComponent>();
             StartProcessConfig startProcessConfig = StartProcessConfigCategory.Instance.Get(fiberInit.Fiber.Process);
-            root.AddComponent<ProcessOuterSender, IPEndPoint, int>(startProcessConfig.IPEndPoint, ProcessOuterSenderInvokerType.NetInner);
+            root.AddComponent<ProcessOuterSender, IPEndPoint>(startProcessConfig.IPEndPoint);
             root.AddComponent<ProcessInnerSender>();
 
             await ETTask.CompletedTask;

+ 0 - 42
Unity/Assets/Scripts/Hotfix/Server/Module/NetInner/ProcessOuterSenderOnReadInvoker_NetInner.cs

@@ -1,42 +0,0 @@
-using System;
-
-namespace ET.Server
-{
-    [Invoke(ProcessOuterSenderInvokerType.NetInner)]
-    public class ProcessOuterSenderOnReadInvoker_NetInner: AInvokeHandler<ProcessOuterSenderOnRead>
-    {
-        public override void Handle(ProcessOuterSenderOnRead args)
-        {
-            ProcessOuterSender processOuterSender = args.ProcessOuterSender;
-            Fiber fiber = processOuterSender.Fiber();
-            ActorId actorId = args.ActorId;
-            object message = args.Message;
-            
-            int fromProcess = actorId.Process;
-            actorId.Process = fiber.Process;
-
-            switch (message)
-            {
-                case ILocationRequest:
-                case IRequest:
-                {
-                    async ETTask Call()
-                    {
-                        IRequest request = (IRequest)message;
-                        // 注意这里都不能抛异常,因为这里只是中转消息
-                        IResponse response = await fiber.ProcessInnerSender.Call(actorId, request, false);
-                        actorId.Process = fromProcess;
-                        processOuterSender.Send(actorId, response);
-                    }
-                    Call().Coroutine();
-                    break;
-                }
-                default:
-                {
-                    fiber.ProcessInnerSender.Send(actorId, (IMessage)message);
-                    break;
-                }
-            }
-        }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Hotfix/Server/Module/NetInner/ProcessOuterSenderOnReadInvoker_NetInner.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 8a136042465332546be6dd3b5b4cfb22
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 1 - 17
Unity/Assets/Scripts/Model/Server/Module/Message/ProcessOuterSender.cs

@@ -3,21 +3,8 @@ using System.Net;
 
 namespace ET.Server
 {
-    public struct ProcessOuterSenderOnRead
-    {
-        public ProcessOuterSender ProcessOuterSender;
-        public ActorId ActorId;
-        public object Message;
-    }
-
-    public static class ProcessOuterSenderInvokerType
-    {
-        public const int Mailbox = 1;
-        public const int NetInner = 2;
-    }
-    
     [ComponentOf(typeof(Scene))]
-    public class ProcessOuterSender: Entity, IAwake<IPEndPoint>, IAwake<IPEndPoint, int>, IUpdate, IDestroy
+    public class ProcessOuterSender: Entity, IAwake<IPEndPoint>, IUpdate, IDestroy
     {
         public const long TIMEOUT_TIME = 40 * 1000;
         
@@ -28,8 +15,5 @@ namespace ET.Server
         public AService AService;
         
         public NetworkProtocol InnerProtocol = NetworkProtocol.KCP;
-
-        // OnRead时根据这个进行分发
-        public int InvokerType;
     }
 }