Bläddra i källkod

把所有Entity挪出Core程序集

tanghai 1 år sedan
förälder
incheckning
a7504c1151
100 ändrade filer med 731 tillägg och 623 borttagningar
  1. 0 0
      Unity/Packages/cn.etetet.actorlocation/Scripts/Model/Server/MessageLocationHandlerAttribute.cs
  2. 0 0
      Unity/Packages/cn.etetet.actorlocation/Scripts/Model/Server/MessageLocationHandlerAttribute.cs.meta
  3. 0 25
      Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailbox/Mailboxes.cs
  4. 25 0
      Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailboxes.cs
  5. 0 0
      Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailboxes.cs.meta
  6. 74 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/MessageSenderSystem.cs
  7. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/MessageSenderSystem.cs.meta
  8. 251 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/ProcessOuterSenderSystem.cs
  9. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/ProcessOuterSenderSystem.cs.meta
  10. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor.meta
  11. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/MessageHandler.cs
  12. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/MessageHandler.cs.meta
  13. 2 15
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/ProcessInnerSenderSystem.cs
  14. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/ProcessInnerSenderSystem.cs.meta
  15. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock.meta
  16. 1 13
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockComponentSystem.cs
  17. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockComponentSystem.cs.meta
  18. 1 34
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueSystem.cs
  19. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueSystem.cs.meta
  20. 1 8
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueTypeSystem.cs
  21. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueTypeSystem.cs.meta
  22. 1 11
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockSystem.cs
  23. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockSystem.cs.meta
  24. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ETCancelationTokenHelper.cs
  25. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ETCancelationTokenHelper.cs.meta
  26. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message.meta
  27. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/MessageSessionHandler.cs
  28. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/MessageSessionHandler.cs.meta
  29. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/NetComponentSystem.cs
  30. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/NetComponentSystem.cs.meta
  31. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionAcceptTimeoutComponentSystem.cs
  32. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionAcceptTimeoutComponentSystem.cs.meta
  33. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionIdleCheckerComponentSystem.cs
  34. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionIdleCheckerComponentSystem.cs.meta
  35. 0 69
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionSystem.cs
  36. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionSystem.cs.meta
  37. 8 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ObjectWait.meta
  38. 3 64
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ObjectWait/ObjectWaitSystem.cs
  39. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ObjectWait/ObjectWaitSystem.cs.meta
  40. 8 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Timer.meta
  41. 4 57
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Timer/TimerComponentSystem.cs
  42. 11 0
      Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Timer/TimerComponentSystem.cs.meta
  43. 0 69
      Unity/Packages/cn.etetet.core/Scripts/Model/Server/MessageSender.cs
  44. 0 246
      Unity/Packages/cn.etetet.core/Scripts/Model/Server/ProcessOuterSender.cs
  45. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor.meta
  46. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/IMHandler.cs
  47. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/IMHandler.cs.meta
  48. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageDispatcher.cs
  49. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageDispatcher.cs.meta
  50. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHandlerAttribute.cs
  51. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHandlerAttribute.cs.meta
  52. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHelper.cs
  53. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHelper.cs.meta
  54. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageQueue.cs
  55. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageQueue.cs.meta
  56. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageSenderStruct.cs
  57. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageSenderStruct.cs.meta
  58. 17 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/ProcessInnerSender.cs
  59. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/ProcessInnerSender.cs.meta
  60. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock.meta
  61. 12 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLock.cs
  62. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLock.cs.meta
  63. 14 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockComponent.cs
  64. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockComponent.cs.meta
  65. 35 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueue.cs
  66. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueue.cs.meta
  67. 9 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueueType.cs
  68. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueueType.cs.meta
  69. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/WaitCoroutineLock.cs
  70. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/WaitCoroutineLock.cs.meta
  71. 1 1
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Mailbox.meta
  72. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Mailbox/MailBoxComponent.cs
  73. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Mailbox/MailBoxComponent.cs.meta
  74. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message.meta
  75. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ErrorCode.cs
  76. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ErrorCode.cs.meta
  77. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/IMessageSessionHandler.cs
  78. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/IMessageSessionHandler.cs.meta
  79. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ISessionMessage.cs
  80. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ISessionMessage.cs.meta
  81. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/LogMsg.cs
  82. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/LogMsg.cs.meta
  83. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionDispatcher.cs
  84. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionDispatcher.cs.meta
  85. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionHandlerAttribute.cs
  86. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionHandlerAttribute.cs.meta
  87. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/NetComponent.cs
  88. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/NetComponent.cs.meta
  89. 74 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/Session.cs
  90. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/Session.cs.meta
  91. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionAcceptTimeoutComponent.cs
  92. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionAcceptTimeoutComponent.cs.meta
  93. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionIdleCheckerComponent.cs
  94. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionIdleCheckerComponent.cs.meta
  95. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/ObjectWait.meta
  96. 69 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/ObjectWait/ObjectWait.cs
  97. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/ObjectWait/ObjectWait.cs.meta
  98. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Timer.meta
  99. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Timer/ATimer.cs
  100. 0 0
      Unity/Packages/cn.etetet.core/Scripts/Model/Share/Timer/ATimer.cs.meta

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageLocationHandlerAttribute.cs → Unity/Packages/cn.etetet.actorlocation/Scripts/Model/Server/MessageLocationHandlerAttribute.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageLocationHandlerAttribute.cs.meta → Unity/Packages/cn.etetet.actorlocation/Scripts/Model/Server/MessageLocationHandlerAttribute.cs.meta


+ 0 - 25
Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailbox/Mailboxes.cs

@@ -1,25 +0,0 @@
-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;
-        }
-    }
-}

+ 25 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailboxes.cs

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

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailbox/Mailboxes.cs.meta → Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailboxes.cs.meta


+ 74 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/MessageSenderSystem.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+
+namespace ET.Server
+{
+    [FriendOf(typeof(MessageSender))]
+    public static partial class MessageSenderSystem
+    {
+        public static void Send(this MessageSender self, ActorId actorId, IMessage message)
+        {
+            Fiber fiber = self.Fiber();
+            // 如果发向同一个进程,则扔到消息队列中
+            if (actorId.Process == fiber.Process)
+            {
+                fiber.Root.GetComponent<ProcessInnerSender>().Send(actorId, message);
+                return;
+            }
+            
+            // 发给NetInner纤程
+            A2NetInner_Message a2NetInnerMessage = A2NetInner_Message.Create();
+            a2NetInnerMessage.FromAddress = fiber.Address;
+            a2NetInnerMessage.ActorId = actorId;
+            a2NetInnerMessage.MessageObject = message;
+
+            MessageQueue.Instance.Send(new ActorId(fiber.Process, SceneType.NetInner), a2NetInnerMessage);
+        }
+
+        private static int GetRpcId(this MessageSender self)
+        {
+            return ++self.RpcId;
+        }
+
+        public static async ETTask<IResponse> Call(
+                this MessageSender self,
+                ActorId actorId,
+                IRequest request,
+                bool needException = true
+        )
+        {
+            if (actorId == default)
+            {
+                throw new Exception($"actor id is 0: {request}");
+            }
+            Fiber fiber = self.Fiber();
+
+            IResponse response;
+            if (fiber.Process == actorId.Process)
+            {
+                response = await fiber.Root.GetComponent<ProcessInnerSender>().Call(actorId, request, needException: needException);
+            }
+            else
+            {
+                // 发给NetInner纤程
+                A2NetInner_Request a2NetInner_Request = A2NetInner_Request.Create();
+                a2NetInner_Request.ActorId = actorId;
+                a2NetInner_Request.MessageObject = request;
+            
+                using A2NetInner_Response a2NetInnerResponse = await fiber.Root.GetComponent<ProcessInnerSender>().Call(
+                    new ActorId(fiber.Process, SceneType.NetInner), a2NetInner_Request) as A2NetInner_Response;
+                response = a2NetInnerResponse.MessageObject;
+            }
+            
+            if (response.Error == ErrorCore.ERR_MessageTimeout)
+            {
+                throw new RpcException(response.Error, $"Rpc error: request, 注意Actor消息超时,请注意查看是否死锁或者没有reply: actorId: {actorId} {request}, response: {response}");
+            }
+            if (needException && ErrorCore.IsRpcNeedThrowException(response.Error))
+            {
+                throw new RpcException(response.Error, $"Rpc error: actorId: {actorId} {request}, response: {response}");
+            }
+            return response;
+        }
+    }
+}

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/MessageSenderSystem.cs.meta

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

+ 251 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/ProcessOuterSenderSystem.cs

@@ -0,0 +1,251 @@
+using System;
+using System.Net;
+
+namespace ET.Server
+{
+    [EntitySystemOf(typeof(ProcessOuterSender))]
+    public static partial class ProcessOuterSenderSystem
+    {
+        [EntitySystem]
+        private static void Awake(this ProcessOuterSender self, IPEndPoint address)
+        {
+            switch (self.InnerProtocol)
+            {
+                case NetworkProtocol.TCP:
+                {
+                    self.AService = new TService(address, ServiceType.Inner);
+                    break;
+                }
+                case NetworkProtocol.KCP:
+                {
+                    self.AService = new KService(address, NetworkProtocol.UDP, ServiceType.Inner);
+                    break;
+                }
+            }
+                
+            self.AService.AcceptCallback = self.OnAccept;
+            self.AService.ReadCallback = self.OnRead;
+            self.AService.ErrorCallback = self.OnError;
+        }
+        
+        
+        [EntitySystem]
+        private static void Update(this ProcessOuterSender self)
+        {
+            self.AService.Update();
+        }
+
+        [EntitySystem]
+        private static void Destroy(this ProcessOuterSender self)
+        {
+            self.AService.Dispose();
+        }
+
+        private static void OnRead(this ProcessOuterSender self, long channelId, MemoryBuffer memoryBuffer)
+        {
+            Session session = self.GetChild<Session>(channelId);
+            if (session == null)
+            {
+                return;
+            }
+            
+            session.LastRecvTime = TimeInfo.Instance.ClientFrameTime();
+
+            (ActorId actorId, object message) = MessageSerializeHelper.ToMessage(self.AService, memoryBuffer);
+            
+            if (message is IResponse response)
+            {
+                self.HandleIActorResponse(response);
+                return;
+            }
+
+            Fiber fiber = self.Fiber();
+            int fromProcess = actorId.Process;
+            actorId.Process = fiber.Process;
+
+            switch (message)
+            {
+                case ILocationRequest:
+                case IRequest:
+                {
+                    CallInner().Coroutine();
+                    break;
+
+                    async ETTask CallInner()
+                    {
+                        IRequest req = (IRequest)message;
+                        int rpcId = req.RpcId;
+                        // 注意这里都不能抛异常,因为这里只是中转消息
+                        IResponse res = await fiber.Root.GetComponent<ProcessInnerSender>().Call(actorId, req, false);
+                        // 注意这里的response会在该协程执行完之后由ProcessInnerSender dispose。
+                        actorId.Process = fromProcess;
+                        res.RpcId = rpcId;
+                        self.Send(actorId, res);
+                        ((MessageObject)res).Dispose();
+                    }
+                }
+                default:
+                {
+                    fiber.Root.GetComponent<ProcessInnerSender>().Send(actorId, (IMessage)message);
+                    break;
+                }
+            }
+        }
+
+        private static void OnError(this ProcessOuterSender self, long channelId, int error)
+        {
+            Session session = self.GetChild<Session>(channelId);
+            if (session == null)
+            {
+                return;
+            }
+
+            session.Error = error;
+            session.Dispose();
+        }
+
+        // 这个channelId是由CreateAcceptChannelId生成的
+        private static void OnAccept(this ProcessOuterSender self, long channelId, IPEndPoint ipEndPoint)
+        {
+            Session session = self.AddChildWithId<Session, AService>(channelId, self.AService);
+            session.RemoteAddress = ipEndPoint;
+            //session.AddComponent<SessionIdleCheckerComponent, int, int, int>(NetThreadComponent.checkInteral, NetThreadComponent.recvMaxIdleTime, NetThreadComponent.sendMaxIdleTime);
+        }
+
+        private static Session CreateInner(this ProcessOuterSender self, long channelId, IPEndPoint ipEndPoint)
+        {
+            Session session = self.AddChildWithId<Session, AService>(channelId, self.AService);
+            session.RemoteAddress = ipEndPoint;
+            self.AService.Create(channelId, session.RemoteAddress);
+
+            //session.AddComponent<InnerPingComponent>();
+            //session.AddComponent<SessionIdleCheckerComponent, int, int, int>(NetThreadComponent.checkInteral, NetThreadComponent.recvMaxIdleTime, NetThreadComponent.sendMaxIdleTime);
+
+            return session;
+        }
+
+        // 内网actor session,channelId是进程号
+        private static Session Get(this ProcessOuterSender self, long channelId)
+        {
+            Session session = self.GetChild<Session>(channelId);
+            if (session != null)
+            {
+                return session;
+            }
+
+            IPEndPoint ipEndPoint = StartProcessConfigCategory.Instance.Get((int) channelId).IPEndPoint;
+            session = self.CreateInner(channelId, ipEndPoint);
+            return session;
+        }
+
+        private static void HandleIActorResponse(this ProcessOuterSender self, IResponse response)
+        {
+            if (!self.requestCallback.Remove(response.RpcId, out MessageSenderStruct actorMessageSender))
+            {
+                return;
+            }
+            Run(actorMessageSender, response);
+        }
+
+        private static void Run(MessageSenderStruct self, IResponse response)
+        {
+            if (response.Error == ErrorCore.ERR_MessageTimeout)
+            {
+                self.SetException(new RpcException(response.Error, $"Rpc error: request, 注意Actor消息超时,请注意查看是否死锁或者没有reply: actorId: {self.ActorId} {self.RequestType.FullName}, response: {response}"));
+                return;
+            }
+
+            if (self.NeedException && ErrorCore.IsRpcNeedThrowException(response.Error))
+            {
+                self.SetException(new RpcException(response.Error, $"Rpc error: actorId: {self.ActorId} request: {self.RequestType.FullName}, response: {response}"));
+                return;
+            }
+
+            self.SetResult(response);
+        }
+
+        public static void Send(this ProcessOuterSender self, ActorId actorId, IMessage message)
+        {
+            self.SendInner(actorId, message as MessageObject);
+        }
+
+        private static void SendInner(this ProcessOuterSender self, ActorId actorId, MessageObject message)
+        {
+            if (actorId == default)
+            {
+                throw new Exception($"actor id is 0: {message}");
+            }
+
+            Fiber fiber = self.Fiber();
+            // 如果发向同一个进程,则报错
+            if (actorId.Process == fiber.Process)
+            {
+                throw new Exception($"actor is the same process: {fiber.Process} {actorId.Process}");
+            }
+            
+            StartProcessConfig startProcessConfig = StartProcessConfigCategory.Instance.Get(actorId.Process);
+            Session session = self.Get(startProcessConfig.Id);
+            actorId.Process = fiber.Process;
+            session.Send(actorId, message);
+        }
+
+        private static int GetRpcId(this ProcessOuterSender self)
+        {
+            return ++self.RpcId;
+        }
+
+        public static async ETTask<IResponse> Call(this ProcessOuterSender self, ActorId actorId, IRequest iRequest, bool needException = true)
+        {
+            if (actorId == default)
+            {
+                throw new Exception($"actor id is 0: {iRequest}");
+            }
+            Fiber fiber = self.Fiber();
+            
+            int rpcId = self.GetRpcId();
+
+            iRequest.RpcId = rpcId;
+
+            Type requestType = iRequest.GetType();
+            MessageSenderStruct messageSenderStruct = new(actorId, requestType, needException);
+            self.requestCallback.Add(rpcId, messageSenderStruct);
+            
+            self.SendInner(actorId, iRequest as MessageObject);
+
+            async ETTask Timeout()
+            {
+                await fiber.Root.GetComponent<TimerComponent>().WaitAsync(ProcessOuterSender.TIMEOUT_TIME);
+                if (!self.requestCallback.Remove(rpcId, out MessageSenderStruct action))
+                {
+                    return;
+                }
+                
+                if (needException)
+                {
+                    action.SetException(new Exception($"actor sender timeout: {requestType.FullName}"));
+                }
+                else
+                {
+                    IResponse response = MessageHelper.CreateResponse(requestType, rpcId, ErrorCore.ERR_Timeout);
+                    action.SetResult(response);
+                }
+            }
+
+            Timeout().Coroutine();
+
+            long beginTime = TimeInfo.Instance.ServerFrameTime();
+
+            IResponse response = await messageSenderStruct.Wait();
+
+            long endTime = TimeInfo.Instance.ServerFrameTime();
+
+            long costTime = endTime - beginTime;
+            if (costTime > 200)
+            {
+                Log.Warning($"actor rpc time > 200: {costTime} {requestType.FullName}");
+            }
+
+            return response;
+        }
+    }
+}

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Server/ProcessOuterSenderSystem.cs.meta

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

+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/World/Actor.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 395a79eb78315e84e92fde7209c84fda
+guid: 81d85550b086ab84490951630c72d8ea
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageHandler.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/MessageHandler.cs


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageHandler.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/MessageHandler.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a3c517bc6582446379a3963842d72a76
+guid: 43f674276b1c8174b95d264357d706df
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 2 - 15
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor/ProcessInnerSender.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/ProcessInnerSenderSystem.cs

@@ -1,5 +1,4 @@
 using System;
-using System.Collections.Generic;
 
 namespace ET
 {
@@ -44,7 +43,8 @@ namespace ET
             ActorId actorId = messageInfo.ActorId;
             MessageObject message = messageInfo.MessageObject;
 
-            MailBoxComponent mailBoxComponent = self.Fiber().Mailboxes.Get(actorId.InstanceId);
+            Entity entity = self.Fiber().Mailboxes.Get(actorId.InstanceId);
+            MailBoxComponent mailBoxComponent = entity as MailBoxComponent;
             if (mailBoxComponent == null)
             {
                 Log.Warning($"actor not found mailbox, from: {actorId} current: {fiber.Address} {message}");
@@ -182,17 +182,4 @@ namespace ET
             return response;
         }
     }
-    
-    
-    [ComponentOf(typeof(Scene))]
-    public class ProcessInnerSender: Entity, IAwake, IDestroy, IUpdate
-    {
-        public const long TIMEOUT_TIME = 40 * 1000;
-        
-        public int RpcId;
-
-        public readonly Dictionary<int, MessageSenderStruct> requestCallback = new();
-        
-        public readonly List<MessageInfo> list = new();
-    }
 }

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Actor/ProcessInnerSenderSystem.cs.meta

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

+ 1 - 1
Unity/Packages/cn.etetet.actorlocation/Scripts/Model/Share.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 1d9c1a18a0b5e4e43ba015262be41ebc
+guid: d7f89dffe862dbd4d96a23c0431086d4
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 1 - 13
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLockComponent.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockComponentSystem.cs

@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
-
-namespace ET
+namespace ET
 {
     [EntitySystemOf(typeof(CoroutineLockComponent))]
     public static partial class CoroutineLockComponentSystem
@@ -49,13 +46,4 @@ namespace ET
             coroutineLockQueueType.Notify(key, level);
         }
     }
-    
-    [ComponentOf(typeof(Scene))]
-    public class CoroutineLockComponent: Entity, IAwake, IScene, IUpdate
-    {
-        public Fiber Fiber { get; set; }
-        public int SceneType { get; set; }
-        
-        public readonly Queue<(long, long, int)> nextFrameRun = new();
-    }
 }

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockComponentSystem.cs.meta

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

+ 1 - 34
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLockQueue.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueSystem.cs

@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
-
-namespace ET
+namespace ET
 {
     [EntitySystemOf(typeof(CoroutineLockQueue))]
     public static partial class CoroutineLockQueueSystem
@@ -60,34 +57,4 @@ namespace ET
             return false;
         }
     }
-    
-    [ChildOf(typeof(CoroutineLockQueueType))]
-    public class CoroutineLockQueue: Entity, IAwake<long>, IDestroy
-    {
-        public long type;
-
-        private EntityRef<CoroutineLock> currentCoroutineLock;
-
-        public CoroutineLock CurrentCoroutineLock
-        {
-            get
-            {
-                return this.currentCoroutineLock;
-            }
-            set
-            {
-                this.currentCoroutineLock = value;
-            }
-        }
-        
-        public Queue<WaitCoroutineLock> queue = new();
-
-        public int Count
-        {
-            get
-            {
-                return this.queue.Count;
-            }
-        }
-    }
 }

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueSystem.cs.meta

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

+ 1 - 8
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLockQueueType.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueTypeSystem.cs

@@ -1,6 +1,4 @@
-using System.Collections.Generic;
-
-namespace ET
+namespace ET
 {
     [EntitySystemOf(typeof(CoroutineLockQueueType))]
     public static partial class CoroutineLockQueueTypeSystem
@@ -46,9 +44,4 @@ namespace ET
             }
         }
     }
-    
-    [ChildOf(typeof(CoroutineLockComponent))]
-    public class CoroutineLockQueueType: Entity, IAwake
-    {
-    }
 }

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockQueueTypeSystem.cs.meta

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

+ 1 - 11
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLock.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockSystem.cs

@@ -1,6 +1,4 @@
-using System;
-
-namespace ET
+namespace ET
 {
     [EntitySystemOf(typeof(CoroutineLock))]
     public static partial class CoroutineLockSystem
@@ -22,12 +20,4 @@ namespace ET
             self.level = 0;
         }
     }
-    
-    [ChildOf(typeof(CoroutineLockQueue))]
-    public class CoroutineLock: Entity, IAwake<long, long, int>, IDestroy
-    {
-        public long type;
-        public long key;
-        public int level;
-    }
 }

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/CoroutineLock/CoroutineLockSystem.cs.meta

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

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Helper/ETCancelationTokenHelper.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ETCancelationTokenHelper.cs


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Helper/ETCancelationTokenHelper.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ETCancelationTokenHelper.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 36b3530e4d4b82d49820f4f1a69ef74f
+guid: 94ef460aff219284a90c2001b88cb583
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailbox.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: e86abc1ecee694b0180d30f5e14df39e
+guid: 05bfe818c9240ea4182040545ce70a6a
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/MessageSessionHandler.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/MessageSessionHandler.cs


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/MessageSessionHandler.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/MessageSessionHandler.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 12a798c6844dd834183ce1c7eee1cf1c
+guid: 1a9506fbd8dba55459733a41efa5d380
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/NetComponentSystem.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/NetComponentSystem.cs


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/NetComponentSystem.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/NetComponentSystem.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 5f96337f559a14c5b841285dce189fe7
+guid: 55706425f0885c747b6f195941d5810c
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionAcceptTimeoutComponentSystem.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionAcceptTimeoutComponentSystem.cs


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionAcceptTimeoutComponentSystem.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionAcceptTimeoutComponentSystem.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 5c61d0b2354824970a9fb5934854bdde
+guid: 93b360fd98d7e964684d9184d845a2c6
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionIdleCheckerComponentSystem.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionIdleCheckerComponentSystem.cs


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionIdleCheckerComponentSystem.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionIdleCheckerComponentSystem.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 925ba85f64ad548c2a8e257f0b09141b
+guid: bd68797ef0baa6c459ec01c978eb17fc
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 69
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/Session.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionSystem.cs

@@ -1,39 +1,8 @@
 using System;
-using System.Collections.Generic;
 using System.Linq;
-using System.Net;
 
 namespace ET
 {
-    public readonly struct RpcInfo
-    {
-        public Type RequestType { get; }
-        
-        private readonly ETTask<IResponse> tcs;
-
-        public RpcInfo(Type requestType)
-        {
-            this.RequestType = requestType;
-            
-            this.tcs = ETTask<IResponse>.Create(true);
-        }
-
-        public void SetResult(IResponse response)
-        {
-            this.tcs.SetResult(response);
-        }
-
-        public void SetException(Exception exception)
-        {
-            this.tcs.SetException(exception);
-        }
-
-        public async ETTask<IResponse> Wait()
-        {
-            return await this.tcs;
-        }
-    }
-    
     [EntitySystemOf(typeof(Session))]
     public static partial class SessionSystem
     {
@@ -155,42 +124,4 @@ namespace ET
             self.AService.Send(self.Id, memoryBuffer);
         }
     }
-
-    [ChildOf]
-    public sealed class Session: Entity, IAwake<AService>, IDestroy
-    {
-        public AService AService { get; set; }
-        
-        public int RpcId
-        {
-            get;
-            set;
-        }
-
-        public readonly Dictionary<int, RpcInfo> requestCallbacks = new();
-        
-        public long LastRecvTime
-        {
-            get;
-            set;
-        }
-
-        public long LastSendTime
-        {
-            get;
-            set;
-        }
-
-        public int Error
-        {
-            get;
-            set;
-        }
-
-        public IPEndPoint RemoteAddress
-        {
-            get;
-            set;
-        }
-    }
 }

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Message/SessionSystem.cs.meta

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

+ 8 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ObjectWait.meta

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

+ 3 - 64
Unity/Packages/cn.etetet.core/Runtime/Fiber/ObjectWait/ObjectWait.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ObjectWait/ObjectWaitSystem.cs

@@ -1,26 +1,10 @@
-using System;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 
 namespace ET
 {
-    public static class WaitTypeError
-    {
-        public const int Success = 0;
-        public const int Destroy = 1;
-        public const int Cancel = 2;
-        public const int Timeout = 3;
-    }
-    
-    public interface IWaitType
-    {
-        int Error
-        {
-            get;
-            set;
-        }
-    }
-
     [EntitySystemOf(typeof(ObjectWait))]
     public static partial class ObjectWaitSystem
     {
@@ -38,45 +22,6 @@ namespace ET
                 ((IDestroyRun) v).SetResult();
             }
         }
-
-        private interface IDestroyRun
-        {
-            void SetResult();
-        }
-
-        private class ResultCallback<K>: Object, IDestroyRun where K : struct, IWaitType
-        {
-            private ETTask<K> tcs;
-
-            public ResultCallback()
-            {
-                this.tcs = ETTask<K>.Create(true);
-            }
-
-            public bool IsDisposed
-            {
-                get
-                {
-                    return this.tcs == null;
-                }
-            }
-
-            public ETTask<K> Task => this.tcs;
-
-            public void SetResult(K k)
-            {
-                var t = tcs;
-                this.tcs = null;
-                t.SetResult(k);
-            }
-
-            public void SetResult()
-            {
-                var t = tcs;
-                this.tcs = null;
-                t.SetResult(new K() { Error = WaitTypeError.Destroy });
-            }
-        }
         
         public static async ETTask<T> Wait<T>(this ObjectWait self, ETCancellationToken cancellationToken = null) where T : struct, IWaitType
         {
@@ -153,10 +98,4 @@ namespace ET
             ((ResultCallback<T>) tcs).SetResult(obj);
         }
     }
-
-    [ComponentOf]
-    public class ObjectWait: Entity, IAwake, IDestroy
-    {
-        public Dictionary<Type, object> tcss = new Dictionary<Type, object>();
-    }
-}
+}

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/ObjectWait/ObjectWaitSystem.cs.meta

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

+ 8 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Timer.meta

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

+ 4 - 57
Unity/Packages/cn.etetet.core/Runtime/Fiber/Timer/TimerComponent.cs → Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Timer/TimerComponentSystem.cs

@@ -1,42 +1,9 @@
-using System.Collections.Generic;
+using System;
+using System.Collections;
+using System.Collections.Generic;
 
 namespace ET
 {
-    public enum TimerClass
-    {
-        None,
-        OnceTimer,
-        OnceWaitTimer,
-        RepeatedTimer,
-    }
-
-    public struct TimerAction
-    {
-        public TimerAction(TimerClass timerClass, long startTime, long time, int type, object obj)
-        {
-            this.TimerClass = timerClass;
-            this.StartTime = startTime;
-            this.Object = obj;
-            this.Time = time;
-            this.Type = type;
-        }
-        
-        public TimerClass TimerClass;
-        
-        public int Type;
-
-        public object Object;
-
-        public long StartTime;
-
-        public long Time;
-    }
-
-    public struct TimerCallback
-    {
-        public object Args;
-    }
-
     [EntitySystemOf(typeof(TimerComponent))]
     public static partial class TimerComponentSystem
     {
@@ -297,24 +264,4 @@ namespace ET
             return self.NewRepeatedTimerInner(time, type, args);
         }
     }
-
-    [ComponentOf(typeof(Scene))]
-    public class TimerComponent: Entity, IAwake, IUpdate
-    {
-        /// <summary>
-        /// key: time, value: timer id
-        /// </summary>
-        public readonly MultiMap<long, long> timeId = new();
-
-        public readonly Queue<long> timeOutTime = new();
-
-        public readonly Queue<long> timeOutTimerIds = new();
-
-        public readonly Dictionary<long, TimerAction> timerActions = new();
-
-        public long idGenerator;
-
-        // 记录最小时间,不用每次都去MultiMap取第一个值
-        public long minTime = long.MaxValue;
-    }
-}
+}

+ 11 - 0
Unity/Packages/cn.etetet.core/Scripts/Hotfix/Share/Timer/TimerComponentSystem.cs.meta

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

+ 0 - 69
Unity/Packages/cn.etetet.core/Scripts/Model/Server/MessageSender.cs

@@ -3,75 +3,6 @@ using System.Collections.Generic;
 
 namespace ET.Server
 {
-    [FriendOf(typeof(MessageSender))]
-    public static partial class MessageSenderSystem
-    {
-        public static void Send(this MessageSender self, ActorId actorId, IMessage message)
-        {
-            Fiber fiber = self.Fiber();
-            // 如果发向同一个进程,则扔到消息队列中
-            if (actorId.Process == fiber.Process)
-            {
-                fiber.Root.GetComponent<ProcessInnerSender>().Send(actorId, message);
-                return;
-            }
-            
-            // 发给NetInner纤程
-            A2NetInner_Message a2NetInnerMessage = A2NetInner_Message.Create();
-            a2NetInnerMessage.FromAddress = fiber.Address;
-            a2NetInnerMessage.ActorId = actorId;
-            a2NetInnerMessage.MessageObject = message;
-
-            MessageQueue.Instance.Send(new ActorId(fiber.Process, SceneType.NetInner), a2NetInnerMessage);
-        }
-
-        private static int GetRpcId(this MessageSender self)
-        {
-            return ++self.RpcId;
-        }
-
-        public static async ETTask<IResponse> Call(
-                this MessageSender self,
-                ActorId actorId,
-                IRequest request,
-                bool needException = true
-        )
-        {
-            if (actorId == default)
-            {
-                throw new Exception($"actor id is 0: {request}");
-            }
-            Fiber fiber = self.Fiber();
-
-            IResponse response;
-            if (fiber.Process == actorId.Process)
-            {
-                response = await fiber.Root.GetComponent<ProcessInnerSender>().Call(actorId, request, needException: needException);
-            }
-            else
-            {
-                // 发给NetInner纤程
-                A2NetInner_Request a2NetInner_Request = A2NetInner_Request.Create();
-                a2NetInner_Request.ActorId = actorId;
-                a2NetInner_Request.MessageObject = request;
-            
-                using A2NetInner_Response a2NetInnerResponse = await fiber.Root.GetComponent<ProcessInnerSender>().Call(
-                    new ActorId(fiber.Process, SceneType.NetInner), a2NetInner_Request) as A2NetInner_Response;
-                response = a2NetInnerResponse.MessageObject;
-            }
-            
-            if (response.Error == ErrorCore.ERR_MessageTimeout)
-            {
-                throw new RpcException(response.Error, $"Rpc error: request, 注意Actor消息超时,请注意查看是否死锁或者没有reply: actorId: {actorId} {request}, response: {response}");
-            }
-            if (needException && ErrorCore.IsRpcNeedThrowException(response.Error))
-            {
-                throw new RpcException(response.Error, $"Rpc error: actorId: {actorId} {request}, response: {response}");
-            }
-            return response;
-        }
-    }
-    
     [ComponentOf(typeof(Scene))]
     public class MessageSender: Entity, IAwake, IDestroy
     {

+ 0 - 246
Unity/Packages/cn.etetet.core/Scripts/Model/Server/ProcessOuterSender.cs

@@ -4,252 +4,6 @@ using System.Net;
 
 namespace ET.Server
 {
-    [EntitySystemOf(typeof(ProcessOuterSender))]
-    public static partial class ProcessOuterSenderSystem
-    {
-        [EntitySystem]
-        private static void Awake(this ProcessOuterSender self, IPEndPoint address)
-        {
-            switch (self.InnerProtocol)
-            {
-                case NetworkProtocol.TCP:
-                {
-                    self.AService = new TService(address, ServiceType.Inner);
-                    break;
-                }
-                case NetworkProtocol.KCP:
-                {
-                    self.AService = new KService(address, NetworkProtocol.UDP, ServiceType.Inner);
-                    break;
-                }
-            }
-                
-            self.AService.AcceptCallback = self.OnAccept;
-            self.AService.ReadCallback = self.OnRead;
-            self.AService.ErrorCallback = self.OnError;
-        }
-        
-        
-        [EntitySystem]
-        private static void Update(this ProcessOuterSender self)
-        {
-            self.AService.Update();
-        }
-
-        [EntitySystem]
-        private static void Destroy(this ProcessOuterSender self)
-        {
-            self.AService.Dispose();
-        }
-
-        private static void OnRead(this ProcessOuterSender self, long channelId, MemoryBuffer memoryBuffer)
-        {
-            Session session = self.GetChild<Session>(channelId);
-            if (session == null)
-            {
-                return;
-            }
-            
-            session.LastRecvTime = TimeInfo.Instance.ClientFrameTime();
-
-            (ActorId actorId, object message) = MessageSerializeHelper.ToMessage(self.AService, memoryBuffer);
-            
-            if (message is IResponse response)
-            {
-                self.HandleIActorResponse(response);
-                return;
-            }
-
-            Fiber fiber = self.Fiber();
-            int fromProcess = actorId.Process;
-            actorId.Process = fiber.Process;
-
-            switch (message)
-            {
-                case ILocationRequest:
-                case IRequest:
-                {
-                    CallInner().Coroutine();
-                    break;
-
-                    async ETTask CallInner()
-                    {
-                        IRequest req = (IRequest)message;
-                        int rpcId = req.RpcId;
-                        // 注意这里都不能抛异常,因为这里只是中转消息
-                        IResponse res = await fiber.Root.GetComponent<ProcessInnerSender>().Call(actorId, req, false);
-                        // 注意这里的response会在该协程执行完之后由ProcessInnerSender dispose。
-                        actorId.Process = fromProcess;
-                        res.RpcId = rpcId;
-                        self.Send(actorId, res);
-                        ((MessageObject)res).Dispose();
-                    }
-                }
-                default:
-                {
-                    fiber.Root.GetComponent<ProcessInnerSender>().Send(actorId, (IMessage)message);
-                    break;
-                }
-            }
-        }
-
-        private static void OnError(this ProcessOuterSender self, long channelId, int error)
-        {
-            Session session = self.GetChild<Session>(channelId);
-            if (session == null)
-            {
-                return;
-            }
-
-            session.Error = error;
-            session.Dispose();
-        }
-
-        // 这个channelId是由CreateAcceptChannelId生成的
-        private static void OnAccept(this ProcessOuterSender self, long channelId, IPEndPoint ipEndPoint)
-        {
-            Session session = self.AddChildWithId<Session, AService>(channelId, self.AService);
-            session.RemoteAddress = ipEndPoint;
-            //session.AddComponent<SessionIdleCheckerComponent, int, int, int>(NetThreadComponent.checkInteral, NetThreadComponent.recvMaxIdleTime, NetThreadComponent.sendMaxIdleTime);
-        }
-
-        private static Session CreateInner(this ProcessOuterSender self, long channelId, IPEndPoint ipEndPoint)
-        {
-            Session session = self.AddChildWithId<Session, AService>(channelId, self.AService);
-            session.RemoteAddress = ipEndPoint;
-            self.AService.Create(channelId, session.RemoteAddress);
-
-            //session.AddComponent<InnerPingComponent>();
-            //session.AddComponent<SessionIdleCheckerComponent, int, int, int>(NetThreadComponent.checkInteral, NetThreadComponent.recvMaxIdleTime, NetThreadComponent.sendMaxIdleTime);
-
-            return session;
-        }
-
-        // 内网actor session,channelId是进程号
-        private static Session Get(this ProcessOuterSender self, long channelId)
-        {
-            Session session = self.GetChild<Session>(channelId);
-            if (session != null)
-            {
-                return session;
-            }
-
-            IPEndPoint ipEndPoint = StartProcessConfigCategory.Instance.Get((int) channelId).IPEndPoint;
-            session = self.CreateInner(channelId, ipEndPoint);
-            return session;
-        }
-
-        private static void HandleIActorResponse(this ProcessOuterSender self, IResponse response)
-        {
-            if (!self.requestCallback.Remove(response.RpcId, out MessageSenderStruct actorMessageSender))
-            {
-                return;
-            }
-            Run(actorMessageSender, response);
-        }
-
-        private static void Run(MessageSenderStruct self, IResponse response)
-        {
-            if (response.Error == ErrorCore.ERR_MessageTimeout)
-            {
-                self.SetException(new RpcException(response.Error, $"Rpc error: request, 注意Actor消息超时,请注意查看是否死锁或者没有reply: actorId: {self.ActorId} {self.RequestType.FullName}, response: {response}"));
-                return;
-            }
-
-            if (self.NeedException && ErrorCore.IsRpcNeedThrowException(response.Error))
-            {
-                self.SetException(new RpcException(response.Error, $"Rpc error: actorId: {self.ActorId} request: {self.RequestType.FullName}, response: {response}"));
-                return;
-            }
-
-            self.SetResult(response);
-        }
-
-        public static void Send(this ProcessOuterSender self, ActorId actorId, IMessage message)
-        {
-            self.SendInner(actorId, message as MessageObject);
-        }
-
-        private static void SendInner(this ProcessOuterSender self, ActorId actorId, MessageObject message)
-        {
-            if (actorId == default)
-            {
-                throw new Exception($"actor id is 0: {message}");
-            }
-
-            Fiber fiber = self.Fiber();
-            // 如果发向同一个进程,则报错
-            if (actorId.Process == fiber.Process)
-            {
-                throw new Exception($"actor is the same process: {fiber.Process} {actorId.Process}");
-            }
-            
-            StartProcessConfig startProcessConfig = StartProcessConfigCategory.Instance.Get(actorId.Process);
-            Session session = self.Get(startProcessConfig.Id);
-            actorId.Process = fiber.Process;
-            session.Send(actorId, message);
-        }
-
-        private static int GetRpcId(this ProcessOuterSender self)
-        {
-            return ++self.RpcId;
-        }
-
-        public static async ETTask<IResponse> Call(this ProcessOuterSender self, ActorId actorId, IRequest iRequest, bool needException = true)
-        {
-            if (actorId == default)
-            {
-                throw new Exception($"actor id is 0: {iRequest}");
-            }
-            Fiber fiber = self.Fiber();
-            
-            int rpcId = self.GetRpcId();
-
-            iRequest.RpcId = rpcId;
-
-            Type requestType = iRequest.GetType();
-            MessageSenderStruct messageSenderStruct = new(actorId, requestType, needException);
-            self.requestCallback.Add(rpcId, messageSenderStruct);
-            
-            self.SendInner(actorId, iRequest as MessageObject);
-
-            async ETTask Timeout()
-            {
-                await fiber.Root.GetComponent<TimerComponent>().WaitAsync(ProcessOuterSender.TIMEOUT_TIME);
-                if (!self.requestCallback.Remove(rpcId, out MessageSenderStruct action))
-                {
-                    return;
-                }
-                
-                if (needException)
-                {
-                    action.SetException(new Exception($"actor sender timeout: {requestType.FullName}"));
-                }
-                else
-                {
-                    IResponse response = MessageHelper.CreateResponse(requestType, rpcId, ErrorCore.ERR_Timeout);
-                    action.SetResult(response);
-                }
-            }
-
-            Timeout().Coroutine();
-
-            long beginTime = TimeInfo.Instance.ServerFrameTime();
-
-            IResponse response = await messageSenderStruct.Wait();
-
-            long endTime = TimeInfo.Instance.ServerFrameTime();
-
-            long costTime = endTime - beginTime;
-            if (costTime > 200)
-            {
-                Log.Warning($"actor rpc time > 200: {costTime} {requestType.FullName}");
-            }
-
-            return response;
-        }
-    }
-    
     [ComponentOf(typeof(Scene))]
     public class ProcessOuterSender: Entity, IAwake<IPEndPoint>, IUpdate, IDestroy
     {

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/IMHandler.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/IMHandler.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/IMHandler.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/IMHandler.cs.meta


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageDispatcher.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageDispatcher.cs

@@ -3,7 +3,7 @@ using System.Collections.Generic;
 
 namespace ET
 {
-    public class MessageDispatcherInfo
+    public struct MessageDispatcherInfo
     {
         public int SceneType { get; }
         

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageDispatcher.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageDispatcher.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageHandlerAttribute.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHandlerAttribute.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageHandlerAttribute.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHandlerAttribute.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor/MessageHelper.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHelper.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor/MessageHelper.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageHelper.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageQueue.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageQueue.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/World/Actor/MessageQueue.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageQueue.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor/MessageSenderStruct.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageSenderStruct.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor/MessageSenderStruct.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/MessageSenderStruct.cs.meta


+ 17 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/ProcessInnerSender.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+
+namespace ET
+{
+    [ComponentOf(typeof(Scene))]
+    public class ProcessInnerSender: Entity, IAwake, IDestroy, IUpdate
+    {
+        public const long TIMEOUT_TIME = 40 * 1000;
+        
+        public int RpcId;
+
+        public readonly Dictionary<int, MessageSenderStruct> requestCallback = new();
+        
+        public readonly List<MessageInfo> list = new();
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Actor/ProcessInnerSender.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Actor/ProcessInnerSender.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock.meta


+ 12 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLock.cs

@@ -0,0 +1,12 @@
+using System;
+
+namespace ET
+{
+    [ChildOf(typeof(CoroutineLockQueue))]
+    public class CoroutineLock: Entity, IAwake<long, long, int>, IDestroy
+    {
+        public long type;
+        public long key;
+        public int level;
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLock.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLock.cs.meta


+ 14 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockComponent.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+
+namespace ET
+{
+    [ComponentOf(typeof(Scene))]
+    public class CoroutineLockComponent: Entity, IAwake, IScene, IUpdate
+    {
+        public Fiber Fiber { get; set; }
+        public int SceneType { get; set; }
+        
+        public readonly Queue<(long, long, int)> nextFrameRun = new();
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLockComponent.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockComponent.cs.meta


+ 35 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueue.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+
+namespace ET
+{
+    [ChildOf(typeof(CoroutineLockQueueType))]
+    public class CoroutineLockQueue: Entity, IAwake<long>, IDestroy
+    {
+        public long type;
+
+        private EntityRef<CoroutineLock> currentCoroutineLock;
+
+        public CoroutineLock CurrentCoroutineLock
+        {
+            get
+            {
+                return this.currentCoroutineLock;
+            }
+            set
+            {
+                this.currentCoroutineLock = value;
+            }
+        }
+        
+        public Queue<WaitCoroutineLock> queue = new();
+
+        public int Count
+        {
+            get
+            {
+                return this.queue.Count;
+            }
+        }
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLockQueue.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueue.cs.meta


+ 9 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueueType.cs

@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace ET
+{
+    [ChildOf(typeof(CoroutineLockComponent))]
+    public class CoroutineLockQueueType: Entity, IAwake
+    {
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/CoroutineLockQueueType.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/CoroutineLockQueueType.cs.meta


+ 1 - 1
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/WaitCoroutineLock.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/WaitCoroutineLock.cs

@@ -16,7 +16,7 @@ namespace ET
         }
     }
     
-    public class WaitCoroutineLock
+    public class WaitCoroutineLock: Object
     {
         public static WaitCoroutineLock Create()
         {

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/CoroutineLock/WaitCoroutineLock.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/CoroutineLock/WaitCoroutineLock.cs.meta


+ 1 - 1
Unity/Packages/cn.etetet.core/Scripts/Model/Share/Mailbox.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: d522a7fadd0c8a94cb8f635fca799e2b
+guid: e86abc1ecee694b0180d30f5e14df39e
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailbox/MailBoxComponent.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Mailbox/MailBoxComponent.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Mailbox/MailBoxComponent.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Mailbox/MailBoxComponent.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/ErrorCode.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ErrorCode.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/ErrorCode.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ErrorCode.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/IMessageSessionHandler.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/IMessageSessionHandler.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/IMessageSessionHandler.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/IMessageSessionHandler.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/ISessionMessage.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ISessionMessage.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/ISessionMessage.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/ISessionMessage.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/LogMsg.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/LogMsg.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/LogMsg.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/LogMsg.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/MessageSessionDispatcher.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionDispatcher.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/MessageSessionDispatcher.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionDispatcher.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/MessageSessionHandlerAttribute.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionHandlerAttribute.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/MessageSessionHandlerAttribute.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/MessageSessionHandlerAttribute.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/NetComponent.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/NetComponent.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/NetComponent.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/NetComponent.cs.meta


+ 74 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/Session.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+
+namespace ET
+{
+    public readonly struct RpcInfo
+    {
+        public Type RequestType { get; }
+        
+        private readonly ETTask<IResponse> tcs;
+
+        public RpcInfo(Type requestType)
+        {
+            this.RequestType = requestType;
+            
+            this.tcs = ETTask<IResponse>.Create(true);
+        }
+
+        public void SetResult(IResponse response)
+        {
+            this.tcs.SetResult(response);
+        }
+
+        public void SetException(Exception exception)
+        {
+            this.tcs.SetException(exception);
+        }
+
+        public async ETTask<IResponse> Wait()
+        {
+            return await this.tcs;
+        }
+    }
+
+    [ChildOf]
+    public sealed class Session: Entity, IAwake<AService>, IDestroy
+    {
+        public AService AService { get; set; }
+        
+        public int RpcId
+        {
+            get;
+            set;
+        }
+
+        public readonly Dictionary<int, RpcInfo> requestCallbacks = new();
+        
+        public long LastRecvTime
+        {
+            get;
+            set;
+        }
+
+        public long LastSendTime
+        {
+            get;
+            set;
+        }
+
+        public int Error
+        {
+            get;
+            set;
+        }
+
+        public IPEndPoint RemoteAddress
+        {
+            get;
+            set;
+        }
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/Session.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/Session.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionAcceptTimeoutComponent.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionAcceptTimeoutComponent.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionAcceptTimeoutComponent.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionAcceptTimeoutComponent.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionIdleCheckerComponent.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionIdleCheckerComponent.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Message/SessionIdleCheckerComponent.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Message/SessionIdleCheckerComponent.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/ObjectWait.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/ObjectWait.meta


+ 69 - 0
Unity/Packages/cn.etetet.core/Scripts/Model/Share/ObjectWait/ObjectWait.cs

@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace ET
+{
+    public static class WaitTypeError
+    {
+        public const int Success = 0;
+        public const int Destroy = 1;
+        public const int Cancel = 2;
+        public const int Timeout = 3;
+    }
+    
+    public interface IWaitType
+    {
+        int Error
+        {
+            get;
+            set;
+        }
+    }
+    
+    
+    public interface IDestroyRun
+    {
+        void SetResult();
+    }
+    
+    public class ResultCallback<K>: Object, IDestroyRun where K : struct, IWaitType
+    {
+        private ETTask<K> tcs;
+
+        public ResultCallback()
+        {
+            this.tcs = ETTask<K>.Create(true);
+        }
+
+        public bool IsDisposed
+        {
+            get
+            {
+                return this.tcs == null;
+            }
+        }
+
+        public ETTask<K> Task => this.tcs;
+
+        public void SetResult(K k)
+        {
+            var t = tcs;
+            this.tcs = null;
+            t.SetResult(k);
+        }
+
+        public void SetResult()
+        {
+            var t = tcs;
+            this.tcs = null;
+            t.SetResult(new K() { Error = WaitTypeError.Destroy });
+        }
+    }
+
+    [ComponentOf]
+    public class ObjectWait: Entity, IAwake, IDestroy
+    {
+        public Dictionary<Type, object> tcss = new Dictionary<Type, object>();
+    }
+}

+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/ObjectWait/ObjectWait.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/ObjectWait/ObjectWait.cs.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Timer.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Timer.meta


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Timer/ATimer.cs → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Timer/ATimer.cs


+ 0 - 0
Unity/Packages/cn.etetet.core/Runtime/Fiber/Timer/ATimer.cs.meta → Unity/Packages/cn.etetet.core/Scripts/Model/Share/Timer/ATimer.cs.meta


Vissa filer visades inte eftersom för många filer har ändrats