Bläddra i källkod

客户端session断开通知Main纤程

tanghai 2 år sedan
förälder
incheckning
34c4098c32

+ 1 - 1
Unity/Assets/Resources/GlobalConfig.asset

@@ -12,6 +12,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 36527db572638af47b03c805671cba75, type: 3}
   m_Name: GlobalConfig
   m_EditorClassIdentifier: 
-  CodeMode: 3
+  CodeMode: 1
   BuildType: 1
   AppType: 7

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

@@ -67,7 +67,7 @@ namespace ET
             {
                 Fiber fiber = new(fiberId, Options.Instance.Process, zone, sceneType, name);
                 
-                this.fibers[fiber.Id] = fiber;
+                this.fibers.TryAdd(fiberId, fiber);
                 this.schedulers[(int) schedulerType].Add(fiberId);
                 
                 TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();

+ 3 - 9
Unity/Assets/Scripts/Hotfix/Client/Demo/Main/ClientSenderCompnentSystem.cs

@@ -3,12 +3,6 @@
     [FriendOf(typeof(ClientSenderCompnent))]
     public static partial class NetClientProxyCompnentSystem
     {
-        [EntitySystem]
-        private static void Awake(this ClientSenderCompnent self)
-        {
-            self.ActorInner = self.Root().GetComponent<ActorInnerComponent>();
-        }
-        
         [EntitySystem]
         private static void Destroy(this ClientSenderCompnent self)
         {
@@ -23,7 +17,7 @@
             self.fiberId = await FiberManager.Instance.Create(SchedulerType.ThreadPool, 0, SceneType.NetClient, "");
             self.netClientActorId = new ActorId(self.Fiber().Process, self.fiberId);
             
-            NetClient2Main_Login response =await self.ActorInner.Call(self.netClientActorId, new Main2NetClient_Login() {Account = account, Password = password}) as NetClient2Main_Login;
+            NetClient2Main_Login response =await self.Fiber().ActorInnerComponent.Call(self.netClientActorId, new Main2NetClient_Login() {Account = account, Password = password}) as NetClient2Main_Login;
             return response.PlayerId;
         }
         
@@ -31,14 +25,14 @@
         {
             A2NetClient_Message a2NetClientMessage = A2NetClient_Message.Create();
             a2NetClientMessage.MessageObject = message;
-            self.ActorInner.Send(self.netClientActorId, a2NetClientMessage);
+            self.Fiber().ActorInnerComponent.Send(self.netClientActorId, a2NetClientMessage);
         }
         
         public static async ETTask<IResponse> Call(this ClientSenderCompnent self, IRequest request, bool needException = true)
         {
             A2NetClient_Request a2NetClientRequest = A2NetClient_Request.Create();
             a2NetClientRequest.MessageObject = request;
-            A2NetClient_Response response = await self.ActorInner.Call(self.netClientActorId, a2NetClientRequest, needException: needException) as A2NetClient_Response;
+            A2NetClient_Response response = await self.Fiber().ActorInnerComponent.Call(self.netClientActorId, a2NetClientRequest, needException: needException) as A2NetClient_Response;
             return response.MessageObject;
         }
     }

+ 12 - 0
Unity/Assets/Scripts/Hotfix/Client/Demo/Main/NetClient2Main_SessionDisposeHandler.cs

@@ -0,0 +1,12 @@
+namespace ET.Client
+{
+    [ActorMessageHandler(SceneType.All)]
+    public class NetClient2Main_SessionDisposeHandler: ActorMessageHandler<Scene, NetClient2Main_SessionDispose>
+    {
+        protected override async ETTask Run(Scene entity, NetClient2Main_SessionDispose message)
+        {
+            Log.Error($"session dispose, error: {message.Error}");
+            await ETTask.CompletedTask;
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Hotfix/Client/Demo/Main/NetClient2Main_SessionDisposeHandler.cs.meta

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

+ 1 - 0
Unity/Assets/Scripts/Hotfix/Client/Demo/NetClient/Router/RouterHelper.cs

@@ -21,6 +21,7 @@ namespace ET.Client
             Session routerSession = root.GetComponent<NetClientComponent>().Create(routerAddress, address, recvLocalConn);
             routerSession.AddComponent<PingComponent>();
             routerSession.AddComponent<RouterCheckComponent>();
+            routerSession.AddComponent<ClientSessionErrorComponent>();
             
             return routerSession;
         }

+ 18 - 0
Unity/Assets/Scripts/Hotfix/Client/Module/Message/ClientSessionErrorComponentSystem.cs

@@ -0,0 +1,18 @@
+namespace ET.Client
+{
+    public static partial class ClientSessionErrorComponentSystem
+    {
+        [EntitySystem]
+        private static void Destroy(this ClientSessionErrorComponent self)
+        {
+            Fiber fiber = self.Fiber();
+            if (fiber.IsDisposed)
+            {
+                return;
+            }
+            NetClient2Main_SessionDispose message = NetClient2Main_SessionDispose.Create();
+            message.Error = self.GetParent<Session>().Error;
+            fiber.ActorInnerComponent.Send(new ActorId(fiber.Process, ConstFiberId.Main), message);
+        }
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Hotfix/Client/Module/Message/ClientSessionErrorComponentSystem.cs.meta

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

+ 0 - 14
Unity/Assets/Scripts/Model/Client/Demo/Main/ClientSenderCompnent.cs

@@ -6,19 +6,5 @@
         public int fiberId;
 
         public ActorId netClientActorId;
-
-        private EntityRef<ActorInnerComponent> actorInner;
-
-        public ActorInnerComponent ActorInner
-        {
-            get
-            {
-                return this.actorInner;
-            }
-            set
-            {
-                this.actorInner = value;
-            }
-        }
     }
 }

+ 16 - 2
Unity/Assets/Scripts/Model/Client/Demo/NetClient/A2NetClient_Message.cs

@@ -29,13 +29,11 @@
         public override void Dispose()
         {
             this.RpcId = default;
-            this.FromAddress = default;
             this.MessageObject = default;
             ObjectPool.Instance.Recycle(this);
         }
      
         public int RpcId { get; set; }
-        public Address FromAddress;
         public IRequest MessageObject;
     }
     
@@ -62,4 +60,20 @@
         
         public IResponse MessageObject;
     }
+    
+    [Message]
+    public class NetClient2Main_SessionDispose: MessageObject, IActorMessage
+    {
+        public static NetClient2Main_SessionDispose Create()
+        {
+            return ObjectPool.Instance.Fetch(typeof(NetClient2Main_SessionDispose)) as NetClient2Main_SessionDispose;
+        }
+
+        public override void Dispose()
+        {
+            ObjectPool.Instance.Recycle(this);
+        }
+        
+        public int Error { get; set; }
+    }
 }

+ 8 - 0
Unity/Assets/Scripts/Model/Client/Module/Message/ClientSessionErrorComponent.cs

@@ -0,0 +1,8 @@
+namespace ET.Client
+{
+    [ComponentOf(typeof(Session))]
+    public class ClientSessionErrorComponent: Entity, IAwake, IDestroy
+    {
+
+    }
+}

+ 11 - 0
Unity/Assets/Scripts/Model/Client/Module/Message/ClientSessionErrorComponent.cs.meta

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