Przeglądaj źródła

整理消息机制

tanghai 2 lat temu
rodzic
commit
bd9e705195
62 zmienionych plików z 301 dodań i 392 usunięć
  1. 21 22
      Unity/Assets/Plugins/Android/libs/armeabi-v7a/libkcp.so.meta
  2. 1 1
      Unity/Assets/Scripts/Core/Entity/Entity.cs
  3. 1 1
      Unity/Assets/Scripts/Core/Entity/EntityHelper.cs
  4. 1 1
      Unity/Assets/Scripts/Core/Entity/EntitySceneFactory.cs
  5. 3 3
      Unity/Assets/Scripts/Core/Fiber/Fiber.cs
  6. 37 0
      Unity/Assets/Scripts/Core/Fiber/MailBoxComponent.cs
  7. 0 0
      Unity/Assets/Scripts/Core/Fiber/MailBoxComponent.cs.meta
  8. 0 0
      Unity/Assets/Scripts/Core/Fiber/MailboxType.cs
  9. 0 0
      Unity/Assets/Scripts/Core/Fiber/MailboxType.cs.meta
  10. 25 0
      Unity/Assets/Scripts/Core/Fiber/Mailboxes.cs
  11. 1 1
      Unity/Assets/Scripts/Core/Fiber/Mailboxes.cs.meta
  12. 0 8
      Unity/Assets/Scripts/Core/Fiber/Module/Actor.meta
  13. 0 25
      Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorEntities.cs
  14. 0 3
      Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorEntities.cs.meta
  15. 0 62
      Unity/Assets/Scripts/Core/Fiber/Module/Actor/FiberActor.cs
  16. 0 13
      Unity/Assets/Scripts/Core/Fiber/Module/Actor/MailBoxComponent.cs
  17. 1 1
      Unity/Assets/Scripts/Core/Fiber/Module/CoroutineLock/CoroutineLock.cs
  18. 3 3
      Unity/Assets/Scripts/Core/Fiber/Module/CoroutineLock/CoroutineLockQueue.cs
  19. 1 1
      Unity/Assets/Scripts/Core/Fiber/Module/CoroutineLock/CoroutineLockQueueType.cs
  20. 1 1
      Unity/Assets/Scripts/Core/Object/DisposeObject.cs
  21. 0 0
      Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageHandlerAttribute.cs
  22. 0 0
      Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageHandlerAttribute.cs.meta
  23. 0 0
      Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageLocationHandlerAttribute.cs
  24. 0 0
      Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageLocationHandlerAttribute.cs.meta
  25. 5 0
      Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageQueue.cs
  26. 0 0
      Unity/Assets/Scripts/Core/World/Module/Actor/IMActorHandler.cs
  27. 0 0
      Unity/Assets/Scripts/Core/World/Module/Actor/IMActorHandler.cs.meta
  28. 0 1
      Unity/Assets/Scripts/Core/World/Module/Fiber/FiberManager.cs
  29. 0 7
      Unity/Assets/Scripts/Core/World/Module/Network/NetServices.cs
  30. 6 10
      Unity/Assets/Scripts/Core/World/Module/ObjectPool/ObjectPool.cs
  31. 1 1
      Unity/Assets/Scripts/Hotfix/Client/Demo/Ping/PingComponentSystem.cs
  32. 1 1
      Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Gate/C2G_LoginGateHandler.cs
  33. 1 1
      Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Map/Transfer/TransferHelper.cs
  34. 3 3
      Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Robot/RobotCaseSystem.cs
  35. 1 1
      Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Robot/RobotManagerComponentSystem.cs
  36. 0 136
      Unity/Assets/Scripts/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs
  37. 0 8
      Unity/Assets/Scripts/Hotfix/Server/Module/Actor.meta
  38. 0 24
      Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorHandleHelper.cs
  39. 0 20
      Unity/Assets/Scripts/Hotfix/Server/Module/Actor/MailBoxComponentSystem.cs
  40. 0 11
      Unity/Assets/Scripts/Hotfix/Server/Module/Actor/MailBoxComponentSystem.cs.meta
  41. 2 2
      Unity/Assets/Scripts/Hotfix/Server/Module/ActorLocation/ActorMessageLocationHandler.cs
  42. 3 2
      Unity/Assets/Scripts/Hotfix/Server/Module/Message/NetInnerComponentSystem.cs
  43. 3 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor.meta
  44. 99 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorHandleHelper.cs
  45. 0 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorHandleHelper.cs.meta
  46. 3 2
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageHandler.cs
  47. 0 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageHandler.cs.meta
  48. 49 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageRecvComponentSystem.cs
  49. 3 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageRecvComponentSystem.cs.meta
  50. 10 7
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageSenderComponentSystem.cs
  51. 0 0
      Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageSenderComponentSystem.cs.meta
  52. 1 1
      Unity/Assets/Scripts/Hotfix/Share/Module/Scene/ClientSceneManagerComponentSystem.cs
  53. 0 6
      Unity/Assets/Scripts/Model/Server/Module/Message/NetInnerComponent.cs
  54. 3 0
      Unity/Assets/Scripts/Model/Share/Module/Actor.meta
  55. 1 2
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorHelper.cs
  56. 0 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorHelper.cs.meta
  57. 10 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageRecvComponent.cs
  58. 0 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageRecvComponent.cs.meta
  59. 0 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSender.cs
  60. 0 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSender.cs.meta
  61. 0 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSenderComponent.cs
  62. 0 0
      Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSenderComponent.cs.meta

+ 21 - 22
Unity/Assets/Plugins/Android/libs/armeabi-v7a/libkcp.so.meta

@@ -1,34 +1,33 @@
 fileFormatVersion: 2
 guid: 8e03e31ef66b1d340bfd9de539878633
-timeCreated: 1530266293
-licenseType: Pro
 PluginImporter:
+  externalObjects: {}
   serializedVersion: 2
   iconMap: {}
   executionOrder: {}
+  defineConstraints: []
   isPreloaded: 0
   isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
   platformData:
-    data:
-      first:
-        Android: Android
-      second:
-        enabled: 1
-        settings:
-          CPU: ARMv7
-    data:
-      first:
-        Any: 
-      second:
-        enabled: 0
-        settings: {}
-    data:
-      first:
-        Editor: Editor
-      second:
-        enabled: 0
-        settings:
-          DefaultValueInitialized: true
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
   userData: 
   assetBundleName: 
   assetBundleVariant: 

+ 1 - 1
Unity/Assets/Scripts/Core/Entity/Entity.cs

@@ -25,7 +25,7 @@ namespace ET
         IdGenerater IdGenerater { get; }
     }
 
-    public partial class Entity: DisposeObject, IPool
+    public partial class Entity: DisposeObject
     {
 #if ENABLE_VIEW && UNITY_EDITOR
         private UnityEngine.GameObject viewGO;

+ 1 - 1
Unity/Assets/Scripts/Core/Entity/EntityHelper.cs

@@ -12,7 +12,7 @@ namespace ET
             return entity.IScene as Scene;
         }
         
-        public static Fiber Root(this Entity entity)
+        public static Fiber Fiber(this Entity entity)
         {
             return entity.IScene.Root as Fiber;
         }

+ 1 - 1
Unity/Assets/Scripts/Core/Entity/EntitySceneFactory.cs

@@ -11,7 +11,7 @@
 
         public static Scene CreateScene(int zone, SceneType sceneType, string name, Entity parent = null)
         {
-            long instanceId = parent.Root().IdGenerater.GenerateInstanceId();
+            long instanceId = parent.Fiber().IdGenerater.GenerateInstanceId();
             Scene scene = new(zone, instanceId, zone, sceneType, name);
             parent?.AddChild(scene);
             return scene;

+ 3 - 3
Unity/Assets/Scripts/Core/Fiber/Fiber.cs

@@ -7,7 +7,7 @@ namespace ET
     {
         public static ActorId GetActorId(this Entity self)
         {
-            Fiber root = self.Root();
+            Fiber root = self.Fiber();
             return new ActorId(root.Process, (int)root.Id, self.InstanceId);
         }
     }
@@ -42,7 +42,7 @@ namespace ET
         public EntitySystem EntitySystem { get; }
         public TimeInfo TimeInfo { get; }
         public IdGenerater IdGenerater { get; }
-        public ActorEntities ActorEntities { get; }
+        public Mailboxes Mailboxes { get; }
 
         public bool IsRuning;
         
@@ -55,7 +55,7 @@ namespace ET
             this.EntitySystem = new EntitySystem();
             this.TimeInfo = new TimeInfo();
             this.IdGenerater = new IdGenerater(process, this.TimeInfo);
-            this.ActorEntities = new ActorEntities();
+            this.Mailboxes = new Mailboxes();
         }
 
         public void Update()

+ 37 - 0
Unity/Assets/Scripts/Core/Fiber/MailBoxComponent.cs

@@ -0,0 +1,37 @@
+namespace ET
+{
+    [FriendOf(typeof(MailBoxComponent))]
+    public static partial class MailBoxComponentSystem
+    {
+        [EntitySystem]       
+        private static void Awake(this MailBoxComponent self, MailboxType mailboxType)
+        {
+            self.MailboxType = mailboxType;
+            self.ParentInstanceId = self.Parent.InstanceId;
+            self.Fiber().Mailboxes.Add(self);
+        }
+        
+        [EntitySystem]
+        private static void Destroy(this MailBoxComponent self)
+        {
+            self.Fiber().Mailboxes.Remove(self.ParentInstanceId);
+        }
+
+        // 加到mailbox
+        public static void Add(this MailBoxComponent self, MessageObject messageObject)
+        {
+            
+        }
+    }
+    
+    /// <summary>
+    /// 挂上这个组件表示该Entity是一个Actor,接收的消息将会队列处理
+    /// </summary>
+    [ComponentOf]
+    public class MailBoxComponent: Entity, IAwake<MailboxType>, IDestroy
+    {
+        public long ParentInstanceId;
+        // Mailbox的类型
+        public MailboxType MailboxType { get; set; }
+    }
+}

+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/MailBoxComponent.cs.meta → Unity/Assets/Scripts/Core/Fiber/MailBoxComponent.cs.meta


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/MailboxType.cs → Unity/Assets/Scripts/Core/Fiber/MailboxType.cs


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/MailboxType.cs.meta → Unity/Assets/Scripts/Core/Fiber/MailboxType.cs.meta


+ 25 - 0
Unity/Assets/Scripts/Core/Fiber/Mailboxes.cs

@@ -0,0 +1,25 @@
+using System.Collections.Generic;
+
+namespace ET
+{
+    public class Mailboxes
+    {
+        private readonly Dictionary<long, MailBoxComponent> mailboxes = new();
+        
+        public void Add(MailBoxComponent mailBoxComponent)
+        {
+            this.mailboxes.Add(mailBoxComponent.Parent.InstanceId, mailBoxComponent);
+        }
+        
+        public void Remove(long instanceId)
+        {
+            this.mailboxes.Remove(instanceId);
+        }
+
+        public MailBoxComponent Get(long instanceId)
+        {
+            this.mailboxes.TryGetValue(instanceId, out MailBoxComponent entity);
+            return entity;
+        }
+    }
+}

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs.meta → Unity/Assets/Scripts/Core/Fiber/Mailboxes.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: dff2f29277362224ba22855b9f1eae57
+guid: b7748d833ec77144bbadc98f35a923fa
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 8
Unity/Assets/Scripts/Core/Fiber/Module/Actor.meta

@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 47400b880e4b31f45b15713ebf5ae20d
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 25
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorEntities.cs

@@ -1,25 +0,0 @@
-using System.Collections.Generic;
-
-namespace ET
-{
-    public class ActorEntities
-    {
-        private readonly Dictionary<ActorId, Entity> actors = new();
-        
-        public void Add(Entity entity)
-        {
-            this.actors.Add(entity.GetActorId(), entity);
-        }
-        
-        public void Remove(Entity entity)
-        {
-            this.actors.Add(entity.GetActorId(), entity);
-        }
-
-        public Entity Get(ActorId actorId)
-        {
-            this.actors.TryGetValue(actorId, out Entity entity);
-            return entity;
-        }
-    }
-}

+ 0 - 3
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorEntities.cs.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 4df8b1e7a9a24667be310e2a897bff9a
-timeCreated: 1687353925

+ 0 - 62
Unity/Assets/Scripts/Core/Fiber/Module/Actor/FiberActor.cs

@@ -1,62 +0,0 @@
-using System.Collections.Generic;
-
-namespace ET
-{
-    [ComponentOf(typeof(Fiber))]
-    public class FiberActor: SingletonEntity<FiberActor>, IAwake
-    {
-        private readonly Dictionary<int, ETTask<IResponse>> requestCallbacks = new();
-
-        private readonly List<ActorMessageInfo> list = new();
-
-        private int rpcId;
-        
-        public override void Dispose()
-        {
-            if (this.IsDisposed)
-            {
-                return;
-            }
-            
-            base.Dispose();
-            
-            ActorMessageQueue.Instance.RemoveQueue((int)this.Root().Id);
-        }
-
-        public void Awake()
-        {
-            ActorMessageQueue.Instance.AddQueue((int)this.Root().Id);
-        }
-
-        public void Update()
-        {
-            this.list.Clear();
-            Fiber fiber = this.Root();
-            ActorMessageQueue.Instance.Fetch((int)fiber.Id, 1000, this.list);
-            
-            ActorMessageDispatcherComponent actorMessageDispatcherComponent = ActorMessageDispatcherComponent.Instance;
-            foreach (ActorMessageInfo actorMessageInfo in this.list)
-            {
-                if (actorMessageInfo.MessageObject is IResponse response)
-                {
-                    HandleResponse(response);
-                    continue;
-                }
-
-                Entity entity = fiber.ActorEntities.Get(actorMessageInfo.ActorId);
-                actorMessageDispatcherComponent.Handle(entity, actorMessageInfo.ActorId, actorMessageInfo.MessageObject).Coroutine();    
-            }
-        }
-
-        private void HandleResponse(IResponse response)
-        {
-            
-        }
-        
-        public void Send(ActorId actorId, MessageObject messageObject)
-        {
-            Fiber fiber = this.Root();
-            ActorMessageQueue.Instance.Send(new Address(fiber.Process, (int)fiber.Id), actorId, messageObject);
-        }
-    }
-}

+ 0 - 13
Unity/Assets/Scripts/Core/Fiber/Module/Actor/MailBoxComponent.cs

@@ -1,13 +0,0 @@
-namespace ET
-{
-    /// <summary>
-    /// 挂上这个组件表示该Entity是一个Actor,接收的消息将会队列处理
-    /// </summary>
-    [ComponentOf]
-    public class MailBoxComponent: Entity, IAwake, IAwake<MailboxType>, IDestroy
-    {
-        public long ParentInstanceId;
-        // Mailbox的类型
-        public MailboxType MailboxType { get; set; }
-    }
-}

+ 1 - 1
Unity/Assets/Scripts/Core/Fiber/Module/CoroutineLock/CoroutineLock.cs

@@ -2,7 +2,7 @@ using System;
 
 namespace ET
 {
-    public class CoroutineLock: IPool
+    public class CoroutineLock: IDisposable
     {
         private int type;
         private long key;

+ 3 - 3
Unity/Assets/Scripts/Core/Fiber/Module/CoroutineLock/CoroutineLockQueue.cs

@@ -3,7 +3,7 @@ using System.Collections.Generic;
 
 namespace ET
 {
-    public class CoroutineLockQueue: IPool
+    public class CoroutineLockQueue: IDisposable
     {
         private int type;
         private long key;
@@ -77,8 +77,8 @@ namespace ET
             this.key = 0;
             this.type = 0;
             this.currentCoroutineLock = null;
+            
+            ObjectPool.Instance.Recycle(this);
         }
-
-        public bool IsFromPool { get; set; }
     }
 }

+ 1 - 1
Unity/Assets/Scripts/Core/Fiber/Module/CoroutineLock/CoroutineLockQueueType.cs

@@ -30,7 +30,7 @@ namespace ET
         {
             if (this.coroutineLockQueues.Remove(key, out CoroutineLockQueue queue))
             {
-                queue.Recycle();
+                queue.Dispose();
             }
         }
 

+ 1 - 1
Unity/Assets/Scripts/Core/Object/DisposeObject.cs

@@ -19,7 +19,7 @@ namespace ET
         }
     }
 
-    public interface IPool: IDisposable
+    public interface IPool
     {
         bool IsFromPool
         {

+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageHandlerAttribute.cs → Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageHandlerAttribute.cs


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageHandlerAttribute.cs.meta → Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageHandlerAttribute.cs.meta


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageLocationHandlerAttribute.cs → Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageLocationHandlerAttribute.cs


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageLocationHandlerAttribute.cs.meta → Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageLocationHandlerAttribute.cs.meta


+ 5 - 0
Unity/Assets/Scripts/Core/World/Module/Actor/ActorMessageQueue.cs

@@ -22,6 +22,11 @@ namespace ET
             this.Send(actorId.Address, actorId, messageObject);
         }
         
+        public void Reply(ActorId actorId, MessageObject messageObject)
+        {
+            this.Send(actorId.Address, actorId, messageObject);
+        }
+        
         public void Send(Address fromAddress, ActorId actorId, MessageObject messageObject)
         {
             if (!this.messages.TryGetValue(actorId.Address.Fiber, out var queue))

+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/IMActorHandler.cs → Unity/Assets/Scripts/Core/World/Module/Actor/IMActorHandler.cs


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/IMActorHandler.cs.meta → Unity/Assets/Scripts/Core/World/Module/Actor/IMActorHandler.cs.meta


+ 0 - 1
Unity/Assets/Scripts/Core/World/Module/Fiber/FiberManager.cs

@@ -26,7 +26,6 @@ namespace ET
                     fiberId = --this.idGenerator;
                 }
                 Fiber fiber = new(fiberId, Options.Instance.Process, sceneType);
-                fiber.AddComponent<FiberActor>();
                 this.fibers.Add((int)fiber.Id, fiber);
                 EventSystem.Instance.Invoke((int)sceneType, new FiberInit());
                 return fiberId;

+ 0 - 7
Unity/Assets/Scripts/Core/World/Module/Network/NetServices.cs

@@ -69,13 +69,6 @@ namespace ET
             AService service = this.Get(serviceId);
             if (service != null)
             {
-                // 同一进程
-                if (actorId.Process == this.Root().Process)
-                {
-                    FiberActor.Instance.Send(actorId, message);
-                    return;
-                }
-
                 service.Send(channelId, actorId, message);
             }
         }

+ 6 - 10
Unity/Assets/Scripts/Core/World/Module/ObjectPool/ObjectPool.cs

@@ -45,23 +45,19 @@ namespace ET
 
         public void Recycle(object obj)
         {
-            Type type = obj.GetType();
-
             if (obj is IPool p)
             {
                 if (!p.IsFromPool)
                 {
                     return;
                 }
-
-                p.Dispose();
-
-                RecycleInner(type, obj);
-            }
-            else
-            {
-                RecycleInner(type, obj);
+                // 防止多次入池
+                p.IsFromPool = false;
             }
+            
+            Type type = obj.GetType();
+
+            RecycleInner(type, obj);
         }
 
         private void RecycleInner(Type type, object obj)

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Client/Demo/Ping/PingComponentSystem.cs

@@ -42,7 +42,7 @@ namespace ET.Client
                     long time2 = TimeHelper.ClientNow();
                     self.Ping = time2 - time1;
                     
-                    self.Root().TimeInfo.ServerMinusClientTime = response.Time + (time2 - time1) / 2 - time2;
+                    self.Fiber().TimeInfo.ServerMinusClientTime = response.Time + (time2 - time1) / 2 - time2;
                     
                     await TimerComponent.Instance.WaitAsync(2000);
                 }

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Gate/C2G_LoginGateHandler.cs

@@ -56,7 +56,7 @@ namespace ET.Server
 
         private static async ETTask CheckRoom(Player player, Session session)
         {
-            await player.Root().WaitFrameFinish();
+            await player.Fiber().WaitFrameFinish();
             
             Room2G_Reconnect room2GateReconnect = await ActorMessageSenderComponent.Instance.Call(
                 player.GetComponent<PlayerRoomComponent>().RoomActorId,

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Map/Transfer/TransferHelper.cs

@@ -7,7 +7,7 @@ namespace ET.Server
     {
         public static async ETTask TransferAtFrameFinish(Unit unit, ActorId sceneInstanceId, string sceneName)
         {
-            await unit.Root().WaitFrameFinish();
+            await unit.Fiber().WaitFrameFinish();
 
             await TransferHelper.Transfer(unit, sceneInstanceId, sceneName);
         }

+ 3 - 3
Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Robot/RobotCaseSystem.cs

@@ -8,7 +8,7 @@ namespace ET.Server
         [EntitySystem]
         private static void Destroy(this RobotCase self)
         {
-            Fiber root = self.Root();
+            Fiber root = self.Fiber();
             if (root.Id == 0)
             {
                 return;
@@ -80,7 +80,7 @@ namespace ET.Server
             Scene clientScene = null;
             try
             {
-                clientScene = await Client.SceneFactory.CreateClientScene(self.Root(), zone, SceneType.Robot, name);
+                clientScene = await Client.SceneFactory.CreateClientScene(self.Fiber(), zone, SceneType.Robot, name);
                 await Client.LoginHelper.Login(clientScene, zone.ToString(), zone.ToString());
                 await Client.EnterMapHelper.EnterMapAsync(clientScene);
                 Log.Debug($"create robot ok: {zone}");
@@ -101,7 +101,7 @@ namespace ET.Server
 
             try
             {
-                clientScene = await Client.SceneFactory.CreateClientScene(self.Root(), zone, SceneType.Robot, $"Robot_{zone}");
+                clientScene = await Client.SceneFactory.CreateClientScene(self.Fiber(), zone, SceneType.Robot, $"Robot_{zone}");
                 await Client.LoginHelper.Login(clientScene, zone.ToString(), zone.ToString());
                 await Client.EnterMapHelper.EnterMapAsync(clientScene);
                 Log.Debug($"create robot ok: {zone}");

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Demo/Scenes/Robot/RobotManagerComponentSystem.cs

@@ -10,7 +10,7 @@ namespace ET.Server
             Scene clientScene = null;
             try
             {
-                clientScene = await Client.SceneFactory.CreateClientScene(self.Root(), zone, SceneType.Robot, "Robot");
+                clientScene = await Client.SceneFactory.CreateClientScene(self.Fiber(), zone, SceneType.Robot, "Robot");
                 await Client.LoginHelper.Login(clientScene, zone.ToString(), zone.ToString());
                 await Client.EnterMapHelper.EnterMapAsync(clientScene);
                 Log.Debug($"create robot ok: {zone}");

+ 0 - 136
Unity/Assets/Scripts/Hotfix/Server/Demo/Session/NetInnerComponentOnReadEvent.cs

@@ -1,136 +0,0 @@
-using System;
-
-namespace ET.Server
-{
-    [Event(SceneType.Process)]
-    public class NetInnerComponentOnReadEvent: AEvent<Scene, NetInnerComponentOnRead>
-    {
-        [EnableAccessEntiyChild]
-        protected override async ETTask Run(Scene scene, NetInnerComponentOnRead args)
-        {
-            await ETTask.CompletedTask;
-            try
-            {
-                ActorId actorId = args.ActorId;
-                MessageObject message = args.Message as MessageObject;
-                if (actorId.Address != scene.Fiber.Address)
-                {
-                    ActorMessageQueue.Instance.Send(actorId, message);
-                    return;
-                }
-
-                actorId.Address = scene.Fiber.Address;
-
-                if (message is IActorResponse iActorResponse)
-                {
-                    ActorMessageSenderComponent.Instance.HandleIActorResponse(iActorResponse);
-                    return;
-                }
-
-                // 收到actor消息,放入actor队列
-                switch (message)
-                {
-                    case IActorRequest iActorRequest:
-                    {
-                        Entity entity = Fiber.Instance.ActorEntities.Get(actorId);
-                        if (entity == null)
-                        {
-                            IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
-                            ActorHandleHelper.Reply(actorId, response);
-                            return;
-                        }
-            
-                        Log.Debug(message.ToJson());
-
-                        MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
-                        if (mailBoxComponent == null)
-                        {
-                            Log.Warning($"actor not found mailbox: {entity.GetType().FullName} {actorId} {iActorRequest}");
-                            IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
-                            ActorHandleHelper.Reply(actorId, response);
-                            return;
-                        }
-            
-                        switch (mailBoxComponent.MailboxType)
-                        {
-                            case MailboxType.OrderedMessage:
-                            {
-                                using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, actorId.InstanceId))
-                                {
-                                    if (entity.InstanceId != actorId.InstanceId)
-                                    {
-                                        IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
-                                        ActorHandleHelper.Reply(actorId, response);
-                                        break;
-                                    }
-                                    await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorRequest);
-                                }
-                                break;
-                            }
-                            case MailboxType.UnOrderMessageDispatcher:
-                            {
-                                await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorRequest);
-                                break;
-                            }
-                            default:
-                                throw new Exception($"no mailboxtype: {mailBoxComponent.MailboxType} {iActorRequest}");
-                        }
-                        break;
-                    }
-                    case IActorMessage iActorMessage:
-                    {
-                        Entity entity = Fiber.Instance.ActorEntities.Get(actorId);
-                        if (entity == null)
-                        {
-                            Log.Error($"not found actor: {actorId} {iActorMessage}");
-                            return;
-                        }
-            
-                        MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
-                        if (mailBoxComponent == null)
-                        {
-                            Log.Error($"actor not found mailbox: {entity.GetType().FullName} {actorId} {iActorMessage}");
-                            return;
-                        }
-
-                        switch (mailBoxComponent.MailboxType)
-                        {
-                            case MailboxType.OrderedMessage:
-                            {
-                                using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, actorId.InstanceId))
-                                {
-                                    if (entity.InstanceId != actorId.InstanceId)
-                                    {
-                                        break;
-                                    }
-                                    await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorMessage);
-                                }
-                                break;
-                            }
-                            case MailboxType.UnOrderMessageDispatcher:
-                            {
-                                await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorMessage);
-                                break;
-                            }
-                            case MailboxType.GateSession:
-                            {
-                                if (entity is PlayerSessionComponent playerSessionComponent)
-                                {
-                                    playerSessionComponent.Session?.Send(iActorMessage);
-                                }
-                                break;
-                            }
-                            default:
-                                throw new Exception($"no mailboxtype: {mailBoxComponent.MailboxType} {iActorMessage}");
-                        }
-                        break;
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                Log.Error($"InnerMessageDispatcher error: {args.Message.GetType().FullName}\n{e}");
-            }
-        }
-    }
-}

+ 0 - 8
Unity/Assets/Scripts/Hotfix/Server/Module/Actor.meta

@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 9de600494d360b545a338fe204b45990
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 24
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorHandleHelper.cs

@@ -1,24 +0,0 @@
-using System;
-
-namespace ET.Server
-{
-    public static partial class ActorHandleHelper
-    {
-        public static void Reply(ActorId actorId, IActorResponse response)
-        {
-            if (actorId.Process == Fiber.Instance.Process) // 返回消息是同一个进程
-            {
-                async ETTask HandleMessageInNextFrame()
-                {
-                    await TimerComponent.Instance.WaitFrameAsync();
-                    NetInnerComponent.Instance.HandleMessage(actorId, response);
-                }
-                HandleMessageInNextFrame().Coroutine();
-                return;
-            }
-
-            Session replySession = NetInnerComponent.Instance.Get(actorId.Process);
-            replySession.Send(response);
-        }
-    }
-}

+ 0 - 20
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/MailBoxComponentSystem.cs

@@ -1,20 +0,0 @@
-using System;
-
-namespace ET.Server
-{
-    [FriendOf(typeof(MailBoxComponent))]
-    public static partial class MailBoxComponentSystem
-    {
-        [EntitySystem]       
-        private static void Awake(this MailBoxComponent self, MailboxType mailboxType)
-        {
-            self.MailboxType = mailboxType;
-            self.ParentInstanceId = self.Parent.InstanceId;
-        }
-        
-        [EntitySystem]
-        private static void Destroy(this MailBoxComponent self)
-        {
-        }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/MailBoxComponentSystem.cs.meta

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

+ 2 - 2
Unity/Assets/Scripts/Hotfix/Server/Module/ActorLocation/ActorMessageLocationHandler.cs

@@ -22,7 +22,7 @@ namespace ET.Server
             }
             
             ActorResponse response = new() {RpcId = message.RpcId};
-            ActorHandleHelper.Reply(actorId, response);
+            ActorMessageSenderComponent.Instance.Reply(actorId, response);
 
             await this.Run(e, message);
         }
@@ -75,7 +75,7 @@ namespace ET.Server
                     response.Message = exception.ToString();
                 }
                 response.RpcId = rpcId;
-                ActorHandleHelper.Reply(actorId, response);
+                ActorMessageSenderComponent.Instance.Reply(actorId, response);
             }
             catch (Exception e)
             {

+ 3 - 2
Unity/Assets/Scripts/Hotfix/Server/Module/Message/NetInnerComponentSystem.cs

@@ -68,9 +68,10 @@ namespace ET.Server
             self.HandleMessage(actorId, message);
         }
 
-        public static void HandleMessage(this NetInnerComponent self, ActorId actorId, object message)
+        private static void HandleMessage(this NetInnerComponent self, ActorId actorId, object message)
         {
-            EventSystem.Instance.Publish(self.Root(), new NetInnerComponentOnRead() { ActorId = actorId, Message = message });
+            // 扔到队列中
+            ActorMessageQueue.Instance.Send(actorId, message as MessageObject);
         }
 
         private static void OnError(this NetInnerComponent self, long channelId, int error)

+ 3 - 0
Unity/Assets/Scripts/Hotfix/Share/Module/Actor.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ee3a9e6a195849ee8792a8793fb0bdd6
+timeCreated: 1687789835

+ 99 - 0
Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorHandleHelper.cs

@@ -0,0 +1,99 @@
+using System;
+
+namespace ET
+{
+    public static partial class ActorHandleHelper
+    {
+        [EnableAccessEntiyChild]
+        public static async ETTask HandleMessage(Fiber fiber, ActorId actorId, MessageObject message)
+        {
+            await ETTask.CompletedTask;
+            /*
+            // 收到actor消息,放入actor队列
+            switch (message)
+            {
+                case IActorRequest iActorRequest:
+                {
+
+
+                    switch (mailBoxComponent.MailboxType)
+                    {
+                        case MailboxType.OrderedMessage:
+                        {
+                            using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, actorId.InstanceId))
+                            {
+                                if (entity.InstanceId != actorId.InstanceId)
+                                {
+                                    IActorResponse response = ActorHelper.CreateResponse(iActorRequest, ErrorCore.ERR_NotFoundActor);
+                                    ActorMessageSenderComponent.Instance.Reply(actorId, response);
+                                    break;
+                                }
+
+                                await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorRequest);
+                            }
+
+                            break;
+                        }
+                        case MailboxType.UnOrderMessageDispatcher:
+                        {
+                            await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorRequest);
+                            break;
+                        }
+                        default:
+                            throw new Exception($"no mailboxtype: {mailBoxComponent.MailboxType} {iActorRequest}");
+                    }
+                    break;
+                }
+                case IActorMessage iActorMessage:
+                {
+                    mailBoxComponent = Fiber.Instance.Mailboxes.Get(actorId.InstanceId);
+                    if (mailBoxComponent == null)
+                    {
+                        Log.Error($"actor not found mailbox: {actorId} {iActorMessage}");
+                        return;
+                    }
+                    mailBoxComponent.Add(iActorMessage as MessageObject);
+
+                    switch (mailBoxComponent.MailboxType)
+                    {
+                        case MailboxType.OrderedMessage:
+                        {
+                            using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, actorId.InstanceId))
+                            {
+                                if (entity.InstanceId != actorId.InstanceId)
+                                {
+                                    break;
+                                }
+
+                                await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorMessage);
+                            }
+
+                            break;
+                        }
+                        case MailboxType.UnOrderMessageDispatcher:
+                        {
+                            await ActorMessageDispatcherComponent.Instance.Handle(entity, actorId, iActorMessage);
+                            break;
+                        }
+                        case MailboxType.GateSession:
+                        {
+                            if (entity is PlayerSessionComponent playerSessionComponent)
+                            {
+                                playerSessionComponent.Session?.Send(iActorMessage);
+                            }
+
+                            break;
+                        }
+                        default:
+                            throw new Exception($"no mailboxtype: {mailBoxComponent.MailboxType} {iActorMessage}");
+                    }
+
+                    break;
+                    
+                }
+                
+            }
+                        */
+        }
+    }
+}

+ 0 - 0
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorHandleHelper.cs.meta → Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorHandleHelper.cs.meta


+ 3 - 2
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorMessageHandler.cs → Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageHandler.cs

@@ -1,6 +1,7 @@
 using System;
+using ET.Server;
 
-namespace ET.Server
+namespace ET
 {
     [EnableClass]
     public abstract class ActorMessageHandler<E, Message>: IMActorHandler where E : Entity where Message : class, IActorMessage
@@ -78,7 +79,7 @@ namespace ET.Server
                 }
                 
                 response.RpcId = rpcId;
-                ActorHandleHelper.Reply(actorId, response);
+                ActorMessageSenderComponent.Instance.Reply(actorId, response);
             }
             catch (Exception e)
             {

+ 0 - 0
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorMessageHandler.cs.meta → Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageHandler.cs.meta


+ 49 - 0
Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageRecvComponentSystem.cs

@@ -0,0 +1,49 @@
+using ET.Server;
+
+namespace ET
+{
+    public static partial class ActorMessageRecvComponentSystem
+    {
+        [EntitySystem]
+        private static void Destroy(this ActorMessageRecvComponent self)
+        {
+            ActorMessageQueue.Instance.RemoveQueue((int)self.Fiber().Id);
+        }
+
+        [EntitySystem]
+        private static void Awake(this ActorMessageRecvComponent self)
+        {
+            ActorMessageQueue.Instance.AddQueue((int)self.Fiber().Id);
+        }
+
+        [EntitySystem]
+        private static void Update(this ActorMessageRecvComponent self)
+        {
+            self.list.Clear();
+            Fiber fiber = self.Fiber();
+            ActorMessageQueue.Instance.Fetch((int)fiber.Id, 1000, self.list);
+            
+            foreach (ActorMessageInfo actorMessageInfo in self.list)
+            {
+                if (actorMessageInfo.MessageObject is IActorResponse response)
+                {
+                    ActorMessageSenderComponent.Instance.HandleIActorResponse(response);
+                    continue;
+                }
+
+                ActorId actorId = actorMessageInfo.ActorId;
+                MessageObject message = actorMessageInfo.MessageObject;
+                actorId.Address = fiber.Address;
+                MailBoxComponent mailBoxComponent = Fiber.Instance.Mailboxes.Get(actorId.InstanceId);
+                if (mailBoxComponent == null)
+                {
+                    Log.Warning($"actor not found mailbox: {actorId} {message}");
+                    IActorResponse resp = ActorHelper.CreateResponse((IActorRequest)message, ErrorCore.ERR_NotFoundActor);
+                    ActorMessageSenderComponent.Instance.Reply(actorId, resp);
+                    return;
+                }
+                mailBoxComponent.Add(message);
+            }
+        }
+    }
+}

+ 3 - 0
Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageRecvComponentSystem.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 281471e7d0804e418f396c17e77c70e7
+timeCreated: 1687785518

+ 10 - 7
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorMessageSenderComponentSystem.cs → Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageSenderComponentSystem.cs

@@ -1,7 +1,7 @@
 using System;
 using System.IO;
 
-namespace ET.Server
+namespace ET
 {
     [FriendOf(typeof(ActorMessageSenderComponent))]
     public static partial class ActorMessageSenderComponentSystem
@@ -84,6 +84,11 @@ namespace ET.Server
 
             self.TimeoutActorMessageSenders.Clear();
         }
+        
+        public static void Reply(this ActorMessageSenderComponent self, ActorId actorId, IMessage message)
+        {
+            self.Send(actorId, message);
+        }
 
         public static void Send(this ActorMessageSenderComponent self, ActorId actorId, IMessage message)
         {
@@ -92,16 +97,14 @@ namespace ET.Server
                 throw new Exception($"actor id is 0: {message}");
             }
             
-            
-            // 这里做了优化,如果发向同一个进程,则等一帧直接处理,不需要通过网络层
-            if (actorId.Process == Fiber.Instance.Process)
+            // 如果发向同一个进程,则扔到消息队列中
+            if (actorId.Process == self.Fiber().Process)
             {
-                ActorMessageQueue.Instance.Send(Fiber.Instance.Address, actorId, message as MessageObject);
+                ActorMessageQueue.Instance.Send(self.Fiber().Address, actorId, message as MessageObject);
                 return;
             }
             
-            Session session = NetInnerComponent.Instance.Get(actorId.Process);
-            session.Send(actorId, message);
+            // 扔到NetInner纤程
         }
 
 

+ 0 - 0
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorMessageSenderComponentSystem.cs.meta → Unity/Assets/Scripts/Hotfix/Share/Module/Actor/ActorMessageSenderComponentSystem.cs.meta


+ 1 - 1
Unity/Assets/Scripts/Hotfix/Share/Module/Scene/ClientSceneManagerComponentSystem.cs

@@ -5,7 +5,7 @@
     {
         public static Scene ClientScene(this Entity entity)
         {
-            return entity.Root().GetComponent<ClientSceneManagerComponent>().Get(entity.DomainZone());
+            return entity.Fiber().GetComponent<ClientSceneManagerComponent>().Get(entity.DomainZone());
         }
         
         public static Scene Get(this ClientSceneManagerComponent self, long id)

+ 0 - 6
Unity/Assets/Scripts/Model/Server/Module/Message/NetInnerComponent.cs

@@ -3,12 +3,6 @@ using System.Net;
 
 namespace ET.Server
 {
-    public struct NetInnerComponentOnRead
-    {
-        public ActorId ActorId;
-        public object Message;
-    }
-    
     [ComponentOf(typeof(Fiber))]
     public class NetInnerComponent: SingletonEntity<NetInnerComponent>, IAwake<IPEndPoint>, IAwake, IDestroy
     {

+ 3 - 0
Unity/Assets/Scripts/Model/Share/Module/Actor.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 82f5cc72d81648e9a4d4836ded8b281e
+timeCreated: 1687787576

+ 1 - 2
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorHelper.cs → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorHelper.cs

@@ -1,7 +1,6 @@
 using System;
-using System.IO;
 
-namespace ET.Server
+namespace ET
 {
     public static partial class ActorHelper
     {

+ 0 - 0
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorHelper.cs.meta → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorHelper.cs.meta


+ 10 - 0
Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageRecvComponent.cs

@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+
+namespace ET
+{
+    [ComponentOf(typeof(Fiber))]
+    public class ActorMessageRecvComponent: SingletonEntity<ActorMessageRecvComponent>, IAwake, IDestroy, IUpdate
+    {
+        public readonly List<ActorMessageInfo> list = new();
+    }
+}

+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/FiberActor.cs.meta → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageRecvComponent.cs.meta


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageSender.cs → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSender.cs


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageSender.cs.meta → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSender.cs.meta


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageSenderComponent.cs → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSenderComponent.cs


+ 0 - 0
Unity/Assets/Scripts/Core/Fiber/Module/Actor/ActorMessageSenderComponent.cs.meta → Unity/Assets/Scripts/Model/Share/Module/Actor/ActorMessageSenderComponent.cs.meta