Kaynağa Gözat

NetService改成了单线程

tanghai 2 yıl önce
ebeveyn
işleme
888cfc6893
27 değiştirilmiş dosya ile 306 ekleme ve 527 silme
  1. 6 0
      Unity/Assets/Scripts/Core/HashSetComponent.cs
  2. 4 0
      Unity/Assets/Scripts/Core/ListComponent.cs
  3. 10 0
      Unity/Assets/Scripts/Core/Object/DisposeObject.cs
  4. 3 3
      Unity/Assets/Scripts/Core/Object/MessageObject.cs
  5. 3 1
      Unity/Assets/Scripts/Core/VProcess/Module/CoroutineLock/CoroutineLock.cs
  6. 8 2
      Unity/Assets/Scripts/Core/VProcess/Module/CoroutineLock/CoroutineLockQueue.cs
  7. 2 9
      Unity/Assets/Scripts/Core/VProcess/Module/Entity/Entity.cs
  8. 1 1
      Unity/Assets/Scripts/Core/VProcess/Module/Entity/EntityHelper.cs
  9. 9 0
      Unity/Assets/Scripts/Core/VProcess/Module/Entity/IScene.cs
  10. 3 0
      Unity/Assets/Scripts/Core/VProcess/Module/Entity/IScene.cs.meta
  11. 34 5
      Unity/Assets/Scripts/Core/VProcess/Module/ObjectPool/ObjectPool.cs
  12. 7 2
      Unity/Assets/Scripts/Core/World/ActorId.cs
  13. 1 1
      Unity/Assets/Scripts/Core/World/Module/Network/AService.cs
  14. 3 3
      Unity/Assets/Scripts/Core/World/Module/Network/KChannel.cs
  15. 2 2
      Unity/Assets/Scripts/Core/World/Module/Network/MessageSerializeHelper.cs
  16. 48 333
      Unity/Assets/Scripts/Core/World/Module/Network/NetServices.cs
  17. 3 3
      Unity/Assets/Scripts/Core/World/Module/Network/TChannel.cs
  18. 1 1
      Unity/Assets/Scripts/Hotfix/Client/Demo/Router/RouterCheckComponentSystem.cs
  19. 1 1
      Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorMessageHandler.cs
  20. 1 1
      Unity/Assets/Scripts/Hotfix/Server/Module/ActorLocation/ActorMessageLocationHandler.cs
  21. 0 4
      Unity/Assets/Scripts/Model/Generate/ClientServer/ConfigPartial/StartProcessConfig.cs
  22. 1 0
      Unity/Assets/Scripts/Model/Generate/ClientServer/ConfigPartial/StartSceneConfig.cs
  23. 46 46
      Unity/Assets/Scripts/Model/Generate/ClientServer/Message/InnerMessage_S_20001.cs
  24. 12 12
      Unity/Assets/Scripts/Model/Generate/ClientServer/Message/LockStepInner_S_21001.cs
  25. 24 24
      Unity/Assets/Scripts/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs
  26. 72 72
      Unity/Assets/Scripts/Model/Generate/ClientServer/Message/OuterMessage_C_10001.cs
  27. 1 1
      Unity/Assets/Scripts/Model/Server/Module/Message/MessageHandler.cs

+ 6 - 0
Unity/Assets/Scripts/Core/HashSetComponent.cs

@@ -5,6 +5,10 @@ namespace ET
 {
     public class HashSetComponent<T>: HashSet<T>, IDisposable
     {
+        private HashSetComponent()
+        {
+        }
+        
         public static HashSetComponent<T> Create()
         {
             return ObjectPool.Instance.Fetch(typeof (HashSetComponent<T>)) as HashSetComponent<T>;
@@ -15,5 +19,7 @@ namespace ET
             this.Clear();
             ObjectPool.Instance.Recycle(this);
         }
+
+        public bool IsFromPool { get; set; }
     }
 }

+ 4 - 0
Unity/Assets/Scripts/Core/ListComponent.cs

@@ -5,6 +5,10 @@ namespace ET
 {
     public class ListComponent<T>: List<T>, IDisposable
     {
+        private ListComponent()
+        {
+        }
+        
         public static ListComponent<T> Create()
         {
             return ObjectPool.Instance.Fetch(typeof (ListComponent<T>)) as ListComponent<T>;

+ 10 - 0
Unity/Assets/Scripts/Core/Object/DisposeObject.cs

@@ -1,5 +1,6 @@
 using System;
 using System.ComponentModel;
+using MongoDB.Bson.Serialization.Attributes;
 
 namespace ET
 {
@@ -17,4 +18,13 @@ namespace ET
         {
         }
     }
+
+    public interface IPool: IDisposable
+    {
+        bool IsFromPool
+        {
+            get;
+            set;
+        }
+    }
 }

+ 3 - 3
Unity/Assets/Scripts/Core/Object/MessageObject.cs

@@ -6,11 +6,11 @@ namespace ET
 {
     public abstract class MessageObject: ProtoObject, IDisposable
     {
-        [BsonIgnore]
-        public bool IsFromPool;
-
         public virtual void Dispose()
         {
         }
+
+        [BsonIgnore]
+        public bool IsFromPool { get; set; }
     }
 }

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

@@ -2,7 +2,7 @@ using System;
 
 namespace ET
 {
-    public class CoroutineLock: IDisposable
+    public class CoroutineLock: IPool
     {
         private int type;
         private long key;
@@ -27,5 +27,7 @@ namespace ET
             
             ObjectPool.Instance.Recycle(this);
         }
+
+        public bool IsFromPool { get; set; }
     }
 }

+ 8 - 2
Unity/Assets/Scripts/Core/VProcess/Module/CoroutineLock/CoroutineLockQueue.cs

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

+ 2 - 9
Unity/Assets/Scripts/Core/VProcess/Module/Entity/Entity.cs

@@ -15,14 +15,7 @@ namespace ET
         IsNew = 1 << 4,
     }
 
-    public interface IScene
-    {
-        IScene Root { get; set; }
-        VProcess VProcess { get; set; }
-        SceneType SceneType { get; set; }
-    }
-
-    public partial class Entity: DisposeObject
+    public partial class Entity: DisposeObject, IPool
     {
 #if ENABLE_VIEW && UNITY_EDITOR
         private UnityEngine.GameObject viewGO;
@@ -44,7 +37,7 @@ namespace ET
         private EntityStatus status = EntityStatus.None;
 
         [BsonIgnore]
-        private bool IsFromPool
+        public bool IsFromPool
         {
             get => (this.status & EntityStatus.IsFromPool) == EntityStatus.IsFromPool;
             set

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

@@ -19,7 +19,7 @@ namespace ET
         
         public static VProcess VProcess(this Entity entity)
         {
-            return entity.Root().VProcess;
+            return entity.IScene.VProcess;
         }
     }
 }

+ 9 - 0
Unity/Assets/Scripts/Core/VProcess/Module/Entity/IScene.cs

@@ -0,0 +1,9 @@
+namespace ET
+{
+    public interface IScene
+    {
+        IScene Root { get; set; }
+        VProcess VProcess { get; set; }
+        SceneType SceneType { get; set; }
+    }
+}

+ 3 - 0
Unity/Assets/Scripts/Core/VProcess/Module/Entity/IScene.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 18e1047315ac4b4e9d873d9056514569
+timeCreated: 1687171102

+ 34 - 5
Unity/Assets/Scripts/Core/VProcess/Module/ObjectPool/ObjectPool.cs

@@ -17,22 +17,51 @@ namespace ET
             lock (this)
             {
                 Queue<object> queue = null;
+                object o;
                 if (!pool.TryGetValue(type, out queue))
                 {
-                    return Activator.CreateInstance(type);
+                    o = Activator.CreateInstance(type);
                 }
-
-                if (queue.Count == 0)
+                else if (queue.Count == 0)
+                {
+                    o = Activator.CreateInstance(type);
+                }
+                else
+                {
+                    o = queue.Dequeue();    
+                }
+                
+                if (o is IPool iPool)
                 {
-                    return Activator.CreateInstance(type);
+                    iPool.IsFromPool = true;
                 }
-                return queue.Dequeue();
+                return o;
             }
         }
 
         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);
+            }
+        }
+
+        private void RecycleInner(Type type, object obj)
+        {
             lock (this)
             {
                 Queue<object> queue = null;

+ 7 - 2
Unity/Assets/Scripts/Core/World/ActorId.cs

@@ -24,13 +24,13 @@ namespace ET
         }
 
         [MemoryPackOrder(0)]
-        public short Process;
+        public int Process;
         [MemoryPackOrder(1)]
         public int VProcess;
         [MemoryPackOrder(2)]
         public long InstanceId;
         
-        public ActorId(short process, int vProcess, long instanceId)
+        public ActorId(int process, int vProcess, long instanceId)
         {
             this.Process = process;
             this.VProcess = vProcess;
@@ -46,5 +46,10 @@ namespace ET
         {
             return !(left == right);
         }
+
+        public override string ToString()
+        {
+            return $"{this.Process}:{this.VProcess}:{this.InstanceId}";
+        }
     }
 }

+ 1 - 1
Unity/Assets/Scripts/Core/World/Module/Network/AService.cs

@@ -23,7 +23,7 @@ namespace ET
             }
             
             // 回收上一个消息跟MemoryBuffer
-            NetServices.Instance.RecycleMessage(this.lastMessageInfo.Message);
+            ObjectPool.Instance.Recycle(this.lastMessageInfo.Message);
             NetServices.Instance.RecycleMemoryBuffer(this.lastMessageInfo.MemoryStream);
 
             MemoryBuffer stream = NetServices.Instance.FetchMemoryBuffer();

+ 3 - 3
Unity/Assets/Scripts/Core/World/Module/Network/KChannel.cs

@@ -512,9 +512,9 @@ namespace ET
 					case ServiceType.Inner:
 					{
 						byte[] buffer = memoryStream.GetBuffer();
-						actorId.Process = BitConverter.ToInt16(buffer, Packet.ActorIdIndex);
-						actorId.VProcess = BitConverter.ToInt32(buffer, Packet.ActorIdIndex + 2);
-						actorId.InstanceId = BitConverter.ToInt64(buffer, Packet.ActorIdIndex + 6);
+						actorId.Process = BitConverter.ToInt32(buffer, Packet.ActorIdIndex);
+						actorId.VProcess = BitConverter.ToInt32(buffer, Packet.ActorIdIndex + 4);
+						actorId.InstanceId = BitConverter.ToInt64(buffer, Packet.ActorIdIndex + 8);
 						ushort opcode = BitConverter.ToUInt16(memoryStream.GetBuffer(), Packet.OpcodeIndex);
 						Type type = NetServices.Instance.GetType(opcode);
 						message = MessageSerializeHelper.Deserialize(type, memoryStream);

+ 2 - 2
Unity/Assets/Scripts/Core/World/Module/Network/MessageSerializeHelper.cs

@@ -17,14 +17,14 @@ namespace ET
 		
         public static MessageObject Deserialize(Type type, byte[] bytes, int index, int count)
         {
-            object o = NetServices.Instance.FetchMessage(type);
+            object o = ObjectPool.Instance.Fetch(type);
             MemoryPackHelper.Deserialize(type, bytes, index, count, ref o);
             return o as MessageObject;
         }
 
         public static MessageObject Deserialize(Type type, MemoryBuffer stream)
         {
-            object o = NetServices.Instance.FetchMessage(type);
+            object o = ObjectPool.Instance.Fetch(type);
             MemoryPackHelper.Deserialize(type, stream, ref o);
             return o as MessageObject;
         }

+ 48 - 333
Unity/Assets/Scripts/Core/World/Module/Network/NetServices.cs

@@ -1,11 +1,7 @@
-//#undef SINGLE_THREAD
-
-using System;
-using System.Collections.Concurrent;
+using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Net;
-using System.Threading.Tasks;
 
 
 
@@ -18,36 +14,8 @@ namespace ET
         Websocket,
     }
 
-    public enum NetOp: byte
-    {
-        AddService = 1,
-        RemoveService = 2,
-        OnAccept = 3,
-        OnRead = 4,
-        OnError = 5,
-        CreateChannel = 6,
-        RemoveChannel = 7,
-        SendMessage = 9,
-        GetChannelConn = 10,
-        ChangeAddress = 11,
-    }
-
-    public struct NetOperator
-    {
-        public NetOp Op; // 操作码
-        public int ServiceId;
-        public long ChannelId;
-        public ActorId ActorId;
-        public object Object; // 参数
-    }
-
     public class NetServices: VProcessSingleton<NetServices>, IVProcessSingletonUpdate
     {
-#if !SINGLE_THREAD
-        private readonly ConcurrentQueue<NetOperator> netThreadOperators = new ConcurrentQueue<NetOperator>();
-        private readonly ConcurrentQueue<NetOperator> mainThreadOperators = new ConcurrentQueue<NetOperator>();
-#endif
-
         public NetServices()
         {
             HashSet<Type> types = EventSystem.Instance.GetTypes(typeof (MessageAttribute));
@@ -67,26 +35,8 @@ namespace ET
 
                 this.typeOpcode.Add(type, messageAttribute.Opcode);
             }
-
-#if !SINGLE_THREAD
-            // 网络线程
-            this.thread = new System.Threading.Thread(this.NetThreadUpdate);
-            this.thread.Start();
-#endif
         }
 
-        public void Destroy()
-        {
-#if !SINGLE_THREAD
-            this.isStop = true;
-            this.thread.Join(1000);
-#endif
-        }
-
-        #region 线程安全
-
-        private readonly MessagePool messagePool = new();
-
         // 初始化后不变,所以主线程,网络线程都可以读
         private readonly DoubleMap<Type, ushort> typeOpcode = new();
 
@@ -100,105 +50,71 @@ namespace ET
             return this.typeOpcode.GetKeyByValue(opcode);
         }
 
-        public MessageObject FetchMessage(Type type)
-        {
-            return this.messagePool.Fetch(type);
-        }
-        
-        public T FetchMessage<T>() where T: MessageObject
-        {
-            return this.messagePool.Fetch<T>();
-        }
-
-        public void RecycleMessage(MessageObject obj)
-        {
-            if (obj == null)
-            {
-                return;
-            }
-            this.messagePool.Recycle(obj);
-        }
-
-        #endregion
-
-        #region 主线程
-
         private readonly Dictionary<int, Action<long, IPEndPoint>> acceptCallback = new();
         private readonly Dictionary<int, Action<long, ActorId, object>> readCallback = new();
         private readonly Dictionary<int, Action<long, int>> errorCallback = new();
 
         private int serviceIdGenerator;
 
-        public async Task<(uint, uint)> GetChannelConn(int serviceId, long channelId)
+        public (uint, uint) GetChannelConn(int serviceId, long channelId)
         {
-            TaskCompletionSource<(uint, uint)> tcs = new TaskCompletionSource<(uint, uint)>();
-            NetOperator netOperator = new NetOperator() { Op = NetOp.GetChannelConn, ServiceId = serviceId, ChannelId = channelId, Object = tcs };
-            ToNetThread(ref netOperator);
-            return await tcs.Task;
-        }
-
-        private void ToNetThread(ref NetOperator netOperator)
-        {
-#if !SINGLE_THREAD
-            this.netThreadOperators.Enqueue(netOperator);
-#else
-            NetThreadExecute(ref netOperator);
-#endif
-        }
+            AService service = this.Get(serviceId);
+            if (service == null)
+            {
+                return (0, 0);
+            }
 
-        private void ToMainThread(ref NetOperator netOperator)
-        {
-#if !SINGLE_THREAD
-            this.mainThreadOperators.Enqueue(netOperator);
-#else
-            MainThreadExecute(ref netOperator);
-#endif
+            return service.GetChannelConn(channelId);
         }
 
         public void ChangeAddress(int serviceId, long channelId, IPEndPoint ipEndPoint)
         {
-            NetOperator netOperator =
-                    new NetOperator() { Op = NetOp.ChangeAddress, ServiceId = serviceId, ChannelId = channelId, Object = ipEndPoint };
-            ToNetThread(ref netOperator);
+            AService service = this.Get(serviceId);
+            if (service == null)
+            {
+                return;
+            }
+
+            service.ChangeAddress(channelId, ipEndPoint);
         }
 
         public void SendMessage(int serviceId, long channelId, ActorId actorId, MessageObject message)
         {
-            NetOperator netOperator = new NetOperator()
+            AService service = this.Get(serviceId);
+            if (service != null)
             {
-                Op = NetOp.SendMessage,
-                ServiceId = serviceId,
-                ChannelId = channelId,
-                ActorId = actorId,
-                Object = message
-            };
-            ToNetThread(ref netOperator);
+                service.Send(channelId, actorId, message);
+            }
         }
 
         public int AddService(AService aService)
         {
             aService.Id = ++this.serviceIdGenerator;
-            NetOperator netOperator = new() { Op = NetOp.AddService, ServiceId = aService.Id, ChannelId = 0, Object = aService };
-            ToNetThread(ref netOperator);
+            this.Add(aService);
             return aService.Id;
         }
 
         public void RemoveService(int serviceId)
         {
-            NetOperator netOperator = new() { Op = NetOp.RemoveService, ServiceId = serviceId };
-            ToNetThread(ref netOperator);
+            this.Remove(serviceId);
         }
 
         public void RemoveChannel(int serviceId, long channelId, int error)
         {
-            NetOperator netOperator = new() { Op = NetOp.RemoveChannel, ServiceId = serviceId, ChannelId = channelId, ActorId = new ActorId(0, error, 0) };
-            ToNetThread(ref netOperator);
+            AService service = this.Get(serviceId);
+            if (service != null)
+            {
+                service.Remove(channelId, error);
+            }
         }
 
         public void CreateChannel(int serviceId, long channelId, IPEndPoint address)
         {
-            NetOperator netOperator = new() { Op = NetOp.CreateChannel, ServiceId = serviceId, ChannelId = channelId, Object = address };
-            ToNetThread(ref netOperator);
+            AService service = this.Get(serviceId);
+            if (service != null)
+            {
+                service.Create(channelId, address);
+            }
         }
 
         public void RegisterAcceptCallback(int serviceId, Action<long, IPEndPoint> action)
@@ -216,70 +132,6 @@ namespace ET
             this.errorCallback.Add(serviceId, action);
         }
 
-        private void MainThreadExecute(ref NetOperator op)
-        {
-            try
-            {
-                switch (op.Op)
-                {
-                    case NetOp.OnAccept:
-                    {
-                        if (!this.acceptCallback.TryGetValue(op.ServiceId, out var action))
-                        {
-                            return;
-                        }
-
-                        action.Invoke(op.ChannelId, op.Object as IPEndPoint);
-                        break;
-                    }
-                    case NetOp.OnRead:
-                    {
-                        if (!this.readCallback.TryGetValue(op.ServiceId, out var action))
-                        {
-                            return;
-                        }
-
-                        action.Invoke(op.ChannelId, op.ActorId, op.Object);
-                        break;
-                    }
-                    case NetOp.OnError:
-                    {
-                        if (!this.errorCallback.TryGetValue(op.ServiceId, out Action<long, int> action))
-                        {
-                            return;
-                        }
-
-                        action.Invoke(op.ChannelId, op.ActorId.VProcess);
-                        break;
-                    }
-                    default:
-                        throw new Exception($"not found net operator: {op.Op}");
-                }
-            }
-            catch (Exception e)
-            {
-                Log.Error(e);
-            }
-        }
-
-        private void UpdateInMainThread()
-        {
-#if !SINGLE_THREAD
-            while (true)
-            {
-                if (!this.mainThreadOperators.TryDequeue(out NetOperator op))
-                {
-                    return;
-                }
-
-                MainThreadExecute(ref op);
-            }
-#endif
-        }
-
-        #endregion
-
-        #region 网络线程
 
         private readonly Dictionary<int, AService> services = new();
         private readonly Queue<int> queue = new();
@@ -344,128 +196,7 @@ namespace ET
             }
         }
 
-#if !SINGLE_THREAD
-
-        private bool isStop;
-        private readonly System.Threading.Thread thread;
-
-        // 网络线程Update
-        private void NetThreadUpdate()
-        {
-            while (!this.isStop)
-            {
-                this.UpdateInNetThread();
-                System.Threading.Thread.Sleep(1);
-            }
-
-            // 停止的时候再执行一帧,把队列中的消息处理完成
-            this.UpdateInNetThread();
-        }
-#endif
-
-        private void NetThreadExecute(ref NetOperator op)
-        {
-            try
-            {
-                switch (op.Op)
-                {
-                    case NetOp.AddService:
-                    {
-                        this.Add(op.Object as AService);
-                        break;
-                    }
-                    case NetOp.RemoveService:
-                    {
-                        this.Remove(op.ServiceId);
-                        break;
-                    }
-                    case NetOp.CreateChannel:
-                    {
-                        AService service = this.Get(op.ServiceId);
-                        if (service != null)
-                        {
-                            service.Create(op.ChannelId, op.Object as IPEndPoint);
-                        }
-
-                        break;
-                    }
-                    case NetOp.RemoveChannel:
-                    {
-                        AService service = this.Get(op.ServiceId);
-                        if (service != null)
-                        {
-                            service.Remove(op.ChannelId, op.ActorId.Process);
-                        }
-
-                        break;
-                    }
-                    case NetOp.SendMessage:
-                    {
-                        AService service = this.Get(op.ServiceId);
-                        if (service != null)
-                        {
-                            service.Send(op.ChannelId, op.ActorId, op.Object as MessageObject);
-                        }
-
-                        break;
-                    }
-                    case NetOp.GetChannelConn:
-                    {
-                        var tcs = op.Object as TaskCompletionSource<ValueTuple<uint, uint>>;
-                        try
-                        {
-                            AService service = this.Get(op.ServiceId);
-                            if (service == null)
-                            {
-                                break;
-                            }
-
-                            tcs.SetResult(service.GetChannelConn(op.ChannelId));
-                        }
-                        catch (Exception e)
-                        {
-                            tcs.SetException(e);
-                        }
-
-                        break;
-                    }
-                    case NetOp.ChangeAddress:
-                    {
-                        AService service = this.Get(op.ServiceId);
-                        if (service == null)
-                        {
-                            break;
-                        }
-
-                        service.ChangeAddress(op.ChannelId, op.Object as IPEndPoint);
-                        break;
-                    }
-                    default:
-                        throw new Exception($"not found net operator: {op.Op}");
-                }
-            }
-            catch (Exception e)
-            {
-                Log.Error(e);
-            }
-        }
-
-        private void RunNetThreadOperator()
-        {
-#if !SINGLE_THREAD
-            while (true)
-            {
-                if (!this.netThreadOperators.TryDequeue(out NetOperator op))
-                {
-                    return;
-                }
-                
-                NetThreadExecute(ref op);
-            }
-#endif
-        }
-
-        private void UpdateInNetThread()
+        public void Update()
         {
             int count = this.queue.Count;
             while (count-- > 0)
@@ -479,49 +210,43 @@ namespace ET
                 this.queue.Enqueue(serviceId);
                 service.Update();
             }
-
-            this.RunNetThreadOperator();
         }
 
         public void OnAccept(int serviceId, long channelId, IPEndPoint ipEndPoint)
         {
-            NetOperator netOperator = new() { Op = NetOp.OnAccept, ServiceId = serviceId, ChannelId = channelId, Object = ipEndPoint };
-            ToMainThread(ref netOperator);
+            if (!this.acceptCallback.TryGetValue(serviceId, out var action))
+            {
+                return;
+            }
+
+            action.Invoke(channelId, ipEndPoint);
         }
 
         public void OnRead(int serviceId, long channelId, ActorId actorId, object message)
         {
-            NetOperator netOperator = new()
+            if (!this.readCallback.TryGetValue(serviceId, out var action))
             {
-                Op = NetOp.OnRead,
-                ServiceId = serviceId,
-                ChannelId = channelId,
-                ActorId = actorId,
-                Object = message
-            };
-            ToMainThread(ref netOperator);
+                return;
+            }
+
+            action.Invoke(channelId, actorId, message);
         }
 
         public void OnError(int serviceId, long channelId, int error)
         {
-            NetOperator netOperator = new() { Op = NetOp.OnError, ServiceId = serviceId, ChannelId = channelId, ActorId = new ActorId(0, error, 0) };
-            ToMainThread(ref netOperator);
+            if (!this.errorCallback.TryGetValue(serviceId, out Action<long, int> action))
+            {
+                return;
+            }
+            action.Invoke(channelId, error);
         }
 
-        #endregion
-
-        #region 主线程kcp id生成
-
         // 这个因为是NetClientComponent中使用,不会与Accept冲突
         public uint CreateConnectChannelId()
         {
             return RandomGenerator.RandUInt32();
         }
 
-        #endregion
-
-        #region 网络线程kcp id生成
-
         // 防止与内网进程号的ChannelId冲突,所以设置为一个大的随机数
         private uint acceptIdGenerator = uint.MaxValue;
 
@@ -529,15 +254,5 @@ namespace ET
         {
             return --this.acceptIdGenerator;
         }
-
-        #endregion
-
-        public void Update()
-        {
-#if SINGLE_THREAD
-            UpdateInNetThread();
-#endif
-            UpdateInMainThread();
-        }
     }
 }

+ 3 - 3
Unity/Assets/Scripts/Core/World/Module/Network/TChannel.cs

@@ -375,9 +375,9 @@ namespace ET
 					case ServiceType.Inner:
 					{
 						byte[] buffer = memoryStream.GetBuffer();
-						actorId.Process = BitConverter.ToInt16(buffer, Packet.ActorIdIndex);
-						actorId.VProcess = BitConverter.ToInt32(buffer, Packet.ActorIdIndex + 2);
-						actorId.InstanceId = BitConverter.ToInt64(buffer, Packet.ActorIdIndex + 6);
+						actorId.Process = BitConverter.ToInt32(buffer, Packet.ActorIdIndex);
+						actorId.VProcess = BitConverter.ToInt32(buffer, Packet.ActorIdIndex + 4);
+						actorId.InstanceId = BitConverter.ToInt64(buffer, Packet.ActorIdIndex + 8);
 						ushort opcode = BitConverter.ToUInt16(buffer, Packet.OpcodeIndex);
 						Type type = NetServices.Instance.GetType(opcode);
 						message = MessageSerializeHelper.Deserialize(type, memoryStream);

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Client/Demo/Router/RouterCheckComponentSystem.cs

@@ -41,7 +41,7 @@ namespace ET.Client
                 {
                     long sessionId = session.Id;
 
-                    (uint localConn, uint remoteConn) = await NetServices.Instance.GetChannelConn(session.ServiceId, sessionId);
+                    (uint localConn, uint remoteConn) = NetServices.Instance.GetChannelConn(session.ServiceId, sessionId);
                     
                     IPEndPoint realAddress = self.GetParent<Session>().RemoteAddress;
                     Log.Info($"get recvLocalConn start: {self.ClientScene().Id} {realAddress} {localConn} {remoteConn}");

+ 1 - 1
Unity/Assets/Scripts/Hotfix/Server/Module/Actor/ActorMessageHandler.cs

@@ -64,7 +64,7 @@ namespace ET.Server
                 }
 
                 int rpcId = request.RpcId;
-                Response response = NetServices.Instance.FetchMessage<Response>();
+                Response response = ObjectPool.Instance.Fetch<Response>();
                 
                 try
                 {

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

@@ -62,7 +62,7 @@ namespace ET.Server
                 }
 
                 int rpcId = request.RpcId;
-                Response response = NetServices.Instance.FetchMessage<Response>();
+                Response response = ObjectPool.Instance.Fetch<Response>();
                 
                 try
                 {

+ 0 - 4
Unity/Assets/Scripts/Model/Generate/ClientServer/ConfigPartial/StartProcessConfig.cs

@@ -6,8 +6,6 @@ namespace ET
     {
         private IPEndPoint innerIPPort;
 
-        public ActorId ActorId;
-
         public IPEndPoint InnerIPPort
         {
             get
@@ -29,8 +27,6 @@ namespace ET
 
         public override void EndInit()
         {
-            this.ActorId = new ActorId((short)this.Id, 0, 0);
-            Log.Info($"StartProcess info: {this.MachineId} {this.Id} {this.ActorId}");
         }
     }
 }

+ 1 - 0
Unity/Assets/Scripts/Model/Generate/ClientServer/ConfigPartial/StartSceneConfig.cs

@@ -135,6 +135,7 @@ namespace ET
 
         public override void EndInit()
         {
+            this.ActorId = new ActorId(this.Process, 0, 0);
             this.Type = EnumHelper.FromString<SceneType>(this.SceneType);
         }
     }

+ 46 - 46
Unity/Assets/Scripts/Model/Generate/ClientServer/Message/InnerMessage_S_20001.cs

@@ -9,9 +9,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectQueryRequest: MessageObject, IActorRequest
 	{
-		public static ObjectQueryRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectQueryRequest() : NetServices.Instance.FetchMessage(typeof(ObjectQueryRequest)) as ObjectQueryRequest; }
+		public static ObjectQueryRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectQueryRequest() : ObjectPool.Instance.Fetch(typeof(ObjectQueryRequest)) as ObjectQueryRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -29,9 +29,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2A_Reload: MessageObject, IActorRequest
 	{
-		public static M2A_Reload Create(bool isFromPool = false) { return !isFromPool? new M2A_Reload() : NetServices.Instance.FetchMessage(typeof(M2A_Reload)) as M2A_Reload; }
+		public static M2A_Reload Create(bool isFromPool = false) { return !isFromPool? new M2A_Reload() : ObjectPool.Instance.Fetch(typeof(M2A_Reload)) as M2A_Reload; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -42,9 +42,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class A2M_Reload: MessageObject, IActorResponse
 	{
-		public static A2M_Reload Create(bool isFromPool = false) { return !isFromPool? new A2M_Reload() : NetServices.Instance.FetchMessage(typeof(A2M_Reload)) as A2M_Reload; }
+		public static A2M_Reload Create(bool isFromPool = false) { return !isFromPool? new A2M_Reload() : ObjectPool.Instance.Fetch(typeof(A2M_Reload)) as A2M_Reload; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -62,9 +62,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2G_LockRequest: MessageObject, IActorRequest
 	{
-		public static G2G_LockRequest Create(bool isFromPool = false) { return !isFromPool? new G2G_LockRequest() : NetServices.Instance.FetchMessage(typeof(G2G_LockRequest)) as G2G_LockRequest; }
+		public static G2G_LockRequest Create(bool isFromPool = false) { return !isFromPool? new G2G_LockRequest() : ObjectPool.Instance.Fetch(typeof(G2G_LockRequest)) as G2G_LockRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -81,9 +81,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2G_LockResponse: MessageObject, IActorResponse
 	{
-		public static G2G_LockResponse Create(bool isFromPool = false) { return !isFromPool? new G2G_LockResponse() : NetServices.Instance.FetchMessage(typeof(G2G_LockResponse)) as G2G_LockResponse; }
+		public static G2G_LockResponse Create(bool isFromPool = false) { return !isFromPool? new G2G_LockResponse() : ObjectPool.Instance.Fetch(typeof(G2G_LockResponse)) as G2G_LockResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -101,9 +101,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2G_LockReleaseRequest: MessageObject, IActorRequest
 	{
-		public static G2G_LockReleaseRequest Create(bool isFromPool = false) { return !isFromPool? new G2G_LockReleaseRequest() : NetServices.Instance.FetchMessage(typeof(G2G_LockReleaseRequest)) as G2G_LockReleaseRequest; }
+		public static G2G_LockReleaseRequest Create(bool isFromPool = false) { return !isFromPool? new G2G_LockReleaseRequest() : ObjectPool.Instance.Fetch(typeof(G2G_LockReleaseRequest)) as G2G_LockReleaseRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -120,9 +120,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2G_LockReleaseResponse: MessageObject, IActorResponse
 	{
-		public static G2G_LockReleaseResponse Create(bool isFromPool = false) { return !isFromPool? new G2G_LockReleaseResponse() : NetServices.Instance.FetchMessage(typeof(G2G_LockReleaseResponse)) as G2G_LockReleaseResponse; }
+		public static G2G_LockReleaseResponse Create(bool isFromPool = false) { return !isFromPool? new G2G_LockReleaseResponse() : ObjectPool.Instance.Fetch(typeof(G2G_LockReleaseResponse)) as G2G_LockReleaseResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -140,9 +140,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectAddRequest: MessageObject, IActorRequest
 	{
-		public static ObjectAddRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectAddRequest() : NetServices.Instance.FetchMessage(typeof(ObjectAddRequest)) as ObjectAddRequest; }
+		public static ObjectAddRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectAddRequest() : ObjectPool.Instance.Fetch(typeof(ObjectAddRequest)) as ObjectAddRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -162,9 +162,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectAddResponse: MessageObject, IActorResponse
 	{
-		public static ObjectAddResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectAddResponse() : NetServices.Instance.FetchMessage(typeof(ObjectAddResponse)) as ObjectAddResponse; }
+		public static ObjectAddResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectAddResponse() : ObjectPool.Instance.Fetch(typeof(ObjectAddResponse)) as ObjectAddResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -182,9 +182,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectLockRequest: MessageObject, IActorRequest
 	{
-		public static ObjectLockRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectLockRequest() : NetServices.Instance.FetchMessage(typeof(ObjectLockRequest)) as ObjectLockRequest; }
+		public static ObjectLockRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectLockRequest() : ObjectPool.Instance.Fetch(typeof(ObjectLockRequest)) as ObjectLockRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -207,9 +207,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectLockResponse: MessageObject, IActorResponse
 	{
-		public static ObjectLockResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectLockResponse() : NetServices.Instance.FetchMessage(typeof(ObjectLockResponse)) as ObjectLockResponse; }
+		public static ObjectLockResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectLockResponse() : ObjectPool.Instance.Fetch(typeof(ObjectLockResponse)) as ObjectLockResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -227,9 +227,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectUnLockRequest: MessageObject, IActorRequest
 	{
-		public static ObjectUnLockRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectUnLockRequest() : NetServices.Instance.FetchMessage(typeof(ObjectUnLockRequest)) as ObjectUnLockRequest; }
+		public static ObjectUnLockRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectUnLockRequest() : ObjectPool.Instance.Fetch(typeof(ObjectUnLockRequest)) as ObjectUnLockRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -252,9 +252,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectUnLockResponse: MessageObject, IActorResponse
 	{
-		public static ObjectUnLockResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectUnLockResponse() : NetServices.Instance.FetchMessage(typeof(ObjectUnLockResponse)) as ObjectUnLockResponse; }
+		public static ObjectUnLockResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectUnLockResponse() : ObjectPool.Instance.Fetch(typeof(ObjectUnLockResponse)) as ObjectUnLockResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -272,9 +272,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectRemoveRequest: MessageObject, IActorRequest
 	{
-		public static ObjectRemoveRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectRemoveRequest() : NetServices.Instance.FetchMessage(typeof(ObjectRemoveRequest)) as ObjectRemoveRequest; }
+		public static ObjectRemoveRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectRemoveRequest() : ObjectPool.Instance.Fetch(typeof(ObjectRemoveRequest)) as ObjectRemoveRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -291,9 +291,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectRemoveResponse: MessageObject, IActorResponse
 	{
-		public static ObjectRemoveResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectRemoveResponse() : NetServices.Instance.FetchMessage(typeof(ObjectRemoveResponse)) as ObjectRemoveResponse; }
+		public static ObjectRemoveResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectRemoveResponse() : ObjectPool.Instance.Fetch(typeof(ObjectRemoveResponse)) as ObjectRemoveResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -311,9 +311,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectGetRequest: MessageObject, IActorRequest
 	{
-		public static ObjectGetRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectGetRequest() : NetServices.Instance.FetchMessage(typeof(ObjectGetRequest)) as ObjectGetRequest; }
+		public static ObjectGetRequest Create(bool isFromPool = false) { return !isFromPool? new ObjectGetRequest() : ObjectPool.Instance.Fetch(typeof(ObjectGetRequest)) as ObjectGetRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -330,9 +330,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectGetResponse: MessageObject, IActorResponse
 	{
-		public static ObjectGetResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectGetResponse() : NetServices.Instance.FetchMessage(typeof(ObjectGetResponse)) as ObjectGetResponse; }
+		public static ObjectGetResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectGetResponse() : ObjectPool.Instance.Fetch(typeof(ObjectGetResponse)) as ObjectGetResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -356,9 +356,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class R2G_GetLoginKey: MessageObject, IActorRequest
 	{
-		public static R2G_GetLoginKey Create(bool isFromPool = false) { return !isFromPool? new R2G_GetLoginKey() : NetServices.Instance.FetchMessage(typeof(R2G_GetLoginKey)) as R2G_GetLoginKey; }
+		public static R2G_GetLoginKey Create(bool isFromPool = false) { return !isFromPool? new R2G_GetLoginKey() : ObjectPool.Instance.Fetch(typeof(R2G_GetLoginKey)) as R2G_GetLoginKey; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -372,9 +372,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2R_GetLoginKey: MessageObject, IActorResponse
 	{
-		public static G2R_GetLoginKey Create(bool isFromPool = false) { return !isFromPool? new G2R_GetLoginKey() : NetServices.Instance.FetchMessage(typeof(G2R_GetLoginKey)) as G2R_GetLoginKey; }
+		public static G2R_GetLoginKey Create(bool isFromPool = false) { return !isFromPool? new G2R_GetLoginKey() : ObjectPool.Instance.Fetch(typeof(G2R_GetLoginKey)) as G2R_GetLoginKey; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -397,9 +397,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2M_SessionDisconnect: MessageObject, IActorLocationMessage
 	{
-		public static G2M_SessionDisconnect Create(bool isFromPool = false) { return !isFromPool? new G2M_SessionDisconnect() : NetServices.Instance.FetchMessage(typeof(G2M_SessionDisconnect)) as G2M_SessionDisconnect; }
+		public static G2M_SessionDisconnect Create(bool isFromPool = false) { return !isFromPool? new G2M_SessionDisconnect() : ObjectPool.Instance.Fetch(typeof(G2M_SessionDisconnect)) as G2M_SessionDisconnect; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -410,9 +410,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class ObjectQueryResponse: MessageObject, IActorResponse
 	{
-		public static ObjectQueryResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectQueryResponse() : NetServices.Instance.FetchMessage(typeof(ObjectQueryResponse)) as ObjectQueryResponse; }
+		public static ObjectQueryResponse Create(bool isFromPool = false) { return !isFromPool? new ObjectQueryResponse() : ObjectPool.Instance.Fetch(typeof(ObjectQueryResponse)) as ObjectQueryResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -433,9 +433,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2M_UnitTransferRequest: MessageObject, IActorRequest
 	{
-		public static M2M_UnitTransferRequest Create(bool isFromPool = false) { return !isFromPool? new M2M_UnitTransferRequest() : NetServices.Instance.FetchMessage(typeof(M2M_UnitTransferRequest)) as M2M_UnitTransferRequest; }
+		public static M2M_UnitTransferRequest Create(bool isFromPool = false) { return !isFromPool? new M2M_UnitTransferRequest() : ObjectPool.Instance.Fetch(typeof(M2M_UnitTransferRequest)) as M2M_UnitTransferRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -455,9 +455,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2M_UnitTransferResponse: MessageObject, IActorResponse
 	{
-		public static M2M_UnitTransferResponse Create(bool isFromPool = false) { return !isFromPool? new M2M_UnitTransferResponse() : NetServices.Instance.FetchMessage(typeof(M2M_UnitTransferResponse)) as M2M_UnitTransferResponse; }
+		public static M2M_UnitTransferResponse Create(bool isFromPool = false) { return !isFromPool? new M2M_UnitTransferResponse() : ObjectPool.Instance.Fetch(typeof(M2M_UnitTransferResponse)) as M2M_UnitTransferResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }

+ 12 - 12
Unity/Assets/Scripts/Model/Generate/ClientServer/Message/LockStepInner_S_21001.cs

@@ -9,9 +9,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2Match_Match: MessageObject, IActorRequest
 	{
-		public static G2Match_Match Create(bool isFromPool = false) { return !isFromPool? new G2Match_Match() : NetServices.Instance.FetchMessage(typeof(G2Match_Match)) as G2Match_Match; }
+		public static G2Match_Match Create(bool isFromPool = false) { return !isFromPool? new G2Match_Match() : ObjectPool.Instance.Fetch(typeof(G2Match_Match)) as G2Match_Match; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -25,9 +25,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Match2G_Match: MessageObject, IActorResponse
 	{
-		public static Match2G_Match Create(bool isFromPool = false) { return !isFromPool? new Match2G_Match() : NetServices.Instance.FetchMessage(typeof(Match2G_Match)) as Match2G_Match; }
+		public static Match2G_Match Create(bool isFromPool = false) { return !isFromPool? new Match2G_Match() : ObjectPool.Instance.Fetch(typeof(Match2G_Match)) as Match2G_Match; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -45,9 +45,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Match2Map_GetRoom: MessageObject, IActorRequest
 	{
-		public static Match2Map_GetRoom Create(bool isFromPool = false) { return !isFromPool? new Match2Map_GetRoom() : NetServices.Instance.FetchMessage(typeof(Match2Map_GetRoom)) as Match2Map_GetRoom; }
+		public static Match2Map_GetRoom Create(bool isFromPool = false) { return !isFromPool? new Match2Map_GetRoom() : ObjectPool.Instance.Fetch(typeof(Match2Map_GetRoom)) as Match2Map_GetRoom; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -61,9 +61,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Map2Match_GetRoom: MessageObject, IActorResponse
 	{
-		public static Map2Match_GetRoom Create(bool isFromPool = false) { return !isFromPool? new Map2Match_GetRoom() : NetServices.Instance.FetchMessage(typeof(Map2Match_GetRoom)) as Map2Match_GetRoom; }
+		public static Map2Match_GetRoom Create(bool isFromPool = false) { return !isFromPool? new Map2Match_GetRoom() : ObjectPool.Instance.Fetch(typeof(Map2Match_GetRoom)) as Map2Match_GetRoom; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -85,9 +85,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2Room_Reconnect: MessageObject, IActorRequest
 	{
-		public static G2Room_Reconnect Create(bool isFromPool = false) { return !isFromPool? new G2Room_Reconnect() : NetServices.Instance.FetchMessage(typeof(G2Room_Reconnect)) as G2Room_Reconnect; }
+		public static G2Room_Reconnect Create(bool isFromPool = false) { return !isFromPool? new G2Room_Reconnect() : ObjectPool.Instance.Fetch(typeof(G2Room_Reconnect)) as G2Room_Reconnect; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -101,9 +101,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Room2G_Reconnect: MessageObject, IActorResponse
 	{
-		public static Room2G_Reconnect Create(bool isFromPool = false) { return !isFromPool? new Room2G_Reconnect() : NetServices.Instance.FetchMessage(typeof(Room2G_Reconnect)) as Room2G_Reconnect; }
+		public static Room2G_Reconnect Create(bool isFromPool = false) { return !isFromPool? new Room2G_Reconnect() : ObjectPool.Instance.Fetch(typeof(Room2G_Reconnect)) as Room2G_Reconnect; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }

+ 24 - 24
Unity/Assets/Scripts/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs

@@ -8,9 +8,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2G_Match: MessageObject, IRequest
 	{
-		public static C2G_Match Create(bool isFromPool = false) { return !isFromPool? new C2G_Match() : NetServices.Instance.FetchMessage(typeof(C2G_Match)) as C2G_Match; }
+		public static C2G_Match Create(bool isFromPool = false) { return !isFromPool? new C2G_Match() : ObjectPool.Instance.Fetch(typeof(C2G_Match)) as C2G_Match; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -21,9 +21,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_Match: MessageObject, IResponse
 	{
-		public static G2C_Match Create(bool isFromPool = false) { return !isFromPool? new G2C_Match() : NetServices.Instance.FetchMessage(typeof(G2C_Match)) as G2C_Match; }
+		public static G2C_Match Create(bool isFromPool = false) { return !isFromPool? new G2C_Match() : ObjectPool.Instance.Fetch(typeof(G2C_Match)) as G2C_Match; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -41,9 +41,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Match2G_NotifyMatchSuccess: MessageObject, IActorMessage
 	{
-		public static Match2G_NotifyMatchSuccess Create(bool isFromPool = false) { return !isFromPool? new Match2G_NotifyMatchSuccess() : NetServices.Instance.FetchMessage(typeof(Match2G_NotifyMatchSuccess)) as Match2G_NotifyMatchSuccess; }
+		public static Match2G_NotifyMatchSuccess Create(bool isFromPool = false) { return !isFromPool? new Match2G_NotifyMatchSuccess() : ObjectPool.Instance.Fetch(typeof(Match2G_NotifyMatchSuccess)) as Match2G_NotifyMatchSuccess; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -59,9 +59,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2Room_ChangeSceneFinish: MessageObject, IActorRoom
 	{
-		public static C2Room_ChangeSceneFinish Create(bool isFromPool = false) { return !isFromPool? new C2Room_ChangeSceneFinish() : NetServices.Instance.FetchMessage(typeof(C2Room_ChangeSceneFinish)) as C2Room_ChangeSceneFinish; }
+		public static C2Room_ChangeSceneFinish Create(bool isFromPool = false) { return !isFromPool? new C2Room_ChangeSceneFinish() : ObjectPool.Instance.Fetch(typeof(C2Room_ChangeSceneFinish)) as C2Room_ChangeSceneFinish; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long PlayerId { get; set; }
@@ -72,9 +72,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class LockStepUnitInfo: MessageObject
 	{
-		public static LockStepUnitInfo Create(bool isFromPool = false) { return !isFromPool? new LockStepUnitInfo() : NetServices.Instance.FetchMessage(typeof(LockStepUnitInfo)) as LockStepUnitInfo; }
+		public static LockStepUnitInfo Create(bool isFromPool = false) { return !isFromPool? new LockStepUnitInfo() : ObjectPool.Instance.Fetch(typeof(LockStepUnitInfo)) as LockStepUnitInfo; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long PlayerId { get; set; }
@@ -92,9 +92,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Room2C_Start: MessageObject, IActorMessage
 	{
-		public static Room2C_Start Create(bool isFromPool = false) { return !isFromPool? new Room2C_Start() : NetServices.Instance.FetchMessage(typeof(Room2C_Start)) as Room2C_Start; }
+		public static Room2C_Start Create(bool isFromPool = false) { return !isFromPool? new Room2C_Start() : ObjectPool.Instance.Fetch(typeof(Room2C_Start)) as Room2C_Start; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long StartTime { get; set; }
@@ -108,9 +108,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class FrameMessage: MessageObject, IActorMessage
 	{
-		public static FrameMessage Create(bool isFromPool = false) { return !isFromPool? new FrameMessage() : NetServices.Instance.FetchMessage(typeof(FrameMessage)) as FrameMessage; }
+		public static FrameMessage Create(bool isFromPool = false) { return !isFromPool? new FrameMessage() : ObjectPool.Instance.Fetch(typeof(FrameMessage)) as FrameMessage; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int Frame { get; set; }
@@ -127,9 +127,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class OneFrameInputs: MessageObject, IActorMessage
 	{
-		public static OneFrameInputs Create(bool isFromPool = false) { return !isFromPool? new OneFrameInputs() : NetServices.Instance.FetchMessage(typeof(OneFrameInputs)) as OneFrameInputs; }
+		public static OneFrameInputs Create(bool isFromPool = false) { return !isFromPool? new OneFrameInputs() : ObjectPool.Instance.Fetch(typeof(OneFrameInputs)) as OneFrameInputs; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MemoryPackOrder(1)]
@@ -140,9 +140,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Room2C_AdjustUpdateTime: MessageObject, IActorMessage
 	{
-		public static Room2C_AdjustUpdateTime Create(bool isFromPool = false) { return !isFromPool? new Room2C_AdjustUpdateTime() : NetServices.Instance.FetchMessage(typeof(Room2C_AdjustUpdateTime)) as Room2C_AdjustUpdateTime; }
+		public static Room2C_AdjustUpdateTime Create(bool isFromPool = false) { return !isFromPool? new Room2C_AdjustUpdateTime() : ObjectPool.Instance.Fetch(typeof(Room2C_AdjustUpdateTime)) as Room2C_AdjustUpdateTime; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int DiffTime { get; set; }
@@ -153,9 +153,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2Room_CheckHash: MessageObject, IActorRoom
 	{
-		public static C2Room_CheckHash Create(bool isFromPool = false) { return !isFromPool? new C2Room_CheckHash() : NetServices.Instance.FetchMessage(typeof(C2Room_CheckHash)) as C2Room_CheckHash; }
+		public static C2Room_CheckHash Create(bool isFromPool = false) { return !isFromPool? new C2Room_CheckHash() : ObjectPool.Instance.Fetch(typeof(C2Room_CheckHash)) as C2Room_CheckHash; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long PlayerId { get; set; }
@@ -172,9 +172,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Room2C_CheckHashFail: MessageObject, IActorMessage
 	{
-		public static Room2C_CheckHashFail Create(bool isFromPool = false) { return !isFromPool? new Room2C_CheckHashFail() : NetServices.Instance.FetchMessage(typeof(Room2C_CheckHashFail)) as Room2C_CheckHashFail; }
+		public static Room2C_CheckHashFail Create(bool isFromPool = false) { return !isFromPool? new Room2C_CheckHashFail() : ObjectPool.Instance.Fetch(typeof(Room2C_CheckHashFail)) as Room2C_CheckHashFail; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int Frame { get; set; }
@@ -188,9 +188,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_Reconnect: MessageObject, IActorMessage
 	{
-		public static G2C_Reconnect Create(bool isFromPool = false) { return !isFromPool? new G2C_Reconnect() : NetServices.Instance.FetchMessage(typeof(G2C_Reconnect)) as G2C_Reconnect; }
+		public static G2C_Reconnect Create(bool isFromPool = false) { return !isFromPool? new G2C_Reconnect() : ObjectPool.Instance.Fetch(typeof(G2C_Reconnect)) as G2C_Reconnect; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long StartTime { get; set; }

+ 72 - 72
Unity/Assets/Scripts/Model/Generate/ClientServer/Message/OuterMessage_C_10001.cs

@@ -7,9 +7,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class HttpGetRouterResponse: MessageObject
 	{
-		public static HttpGetRouterResponse Create(bool isFromPool = false) { return !isFromPool? new HttpGetRouterResponse() : NetServices.Instance.FetchMessage(typeof(HttpGetRouterResponse)) as HttpGetRouterResponse; }
+		public static HttpGetRouterResponse Create(bool isFromPool = false) { return !isFromPool? new HttpGetRouterResponse() : ObjectPool.Instance.Fetch(typeof(HttpGetRouterResponse)) as HttpGetRouterResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public List<string> Realms { get; set; }
@@ -23,9 +23,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class RouterSync: MessageObject
 	{
-		public static RouterSync Create(bool isFromPool = false) { return !isFromPool? new RouterSync() : NetServices.Instance.FetchMessage(typeof(RouterSync)) as RouterSync; }
+		public static RouterSync Create(bool isFromPool = false) { return !isFromPool? new RouterSync() : ObjectPool.Instance.Fetch(typeof(RouterSync)) as RouterSync; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public uint ConnectId { get; set; }
@@ -40,9 +40,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_TestRequest: MessageObject, IActorLocationRequest
 	{
-		public static C2M_TestRequest Create(bool isFromPool = false) { return !isFromPool? new C2M_TestRequest() : NetServices.Instance.FetchMessage(typeof(C2M_TestRequest)) as C2M_TestRequest; }
+		public static C2M_TestRequest Create(bool isFromPool = false) { return !isFromPool? new C2M_TestRequest() : ObjectPool.Instance.Fetch(typeof(C2M_TestRequest)) as C2M_TestRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -56,9 +56,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_TestResponse: MessageObject, IActorResponse
 	{
-		public static M2C_TestResponse Create(bool isFromPool = false) { return !isFromPool? new M2C_TestResponse() : NetServices.Instance.FetchMessage(typeof(M2C_TestResponse)) as M2C_TestResponse; }
+		public static M2C_TestResponse Create(bool isFromPool = false) { return !isFromPool? new M2C_TestResponse() : ObjectPool.Instance.Fetch(typeof(M2C_TestResponse)) as M2C_TestResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -79,9 +79,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Actor_TransferRequest: MessageObject, IActorLocationRequest
 	{
-		public static Actor_TransferRequest Create(bool isFromPool = false) { return !isFromPool? new Actor_TransferRequest() : NetServices.Instance.FetchMessage(typeof(Actor_TransferRequest)) as Actor_TransferRequest; }
+		public static Actor_TransferRequest Create(bool isFromPool = false) { return !isFromPool? new Actor_TransferRequest() : ObjectPool.Instance.Fetch(typeof(Actor_TransferRequest)) as Actor_TransferRequest; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -95,9 +95,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class Actor_TransferResponse: MessageObject, IActorLocationResponse
 	{
-		public static Actor_TransferResponse Create(bool isFromPool = false) { return !isFromPool? new Actor_TransferResponse() : NetServices.Instance.FetchMessage(typeof(Actor_TransferResponse)) as Actor_TransferResponse; }
+		public static Actor_TransferResponse Create(bool isFromPool = false) { return !isFromPool? new Actor_TransferResponse() : ObjectPool.Instance.Fetch(typeof(Actor_TransferResponse)) as Actor_TransferResponse; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -115,9 +115,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2G_EnterMap: MessageObject, IRequest
 	{
-		public static C2G_EnterMap Create(bool isFromPool = false) { return !isFromPool? new C2G_EnterMap() : NetServices.Instance.FetchMessage(typeof(C2G_EnterMap)) as C2G_EnterMap; }
+		public static C2G_EnterMap Create(bool isFromPool = false) { return !isFromPool? new C2G_EnterMap() : ObjectPool.Instance.Fetch(typeof(C2G_EnterMap)) as C2G_EnterMap; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -128,9 +128,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_EnterMap: MessageObject, IResponse
 	{
-		public static G2C_EnterMap Create(bool isFromPool = false) { return !isFromPool? new G2C_EnterMap() : NetServices.Instance.FetchMessage(typeof(G2C_EnterMap)) as G2C_EnterMap; }
+		public static G2C_EnterMap Create(bool isFromPool = false) { return !isFromPool? new G2C_EnterMap() : ObjectPool.Instance.Fetch(typeof(G2C_EnterMap)) as G2C_EnterMap; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -151,9 +151,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class MoveInfo: MessageObject
 	{
-		public static MoveInfo Create(bool isFromPool = false) { return !isFromPool? new MoveInfo() : NetServices.Instance.FetchMessage(typeof(MoveInfo)) as MoveInfo; }
+		public static MoveInfo Create(bool isFromPool = false) { return !isFromPool? new MoveInfo() : ObjectPool.Instance.Fetch(typeof(MoveInfo)) as MoveInfo; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public List<Unity.Mathematics.float3> Points { get; set; }
@@ -170,9 +170,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class UnitInfo: MessageObject
 	{
-		public static UnitInfo Create(bool isFromPool = false) { return !isFromPool? new UnitInfo() : NetServices.Instance.FetchMessage(typeof(UnitInfo)) as UnitInfo; }
+		public static UnitInfo Create(bool isFromPool = false) { return !isFromPool? new UnitInfo() : ObjectPool.Instance.Fetch(typeof(UnitInfo)) as UnitInfo; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long UnitId { get; set; }
@@ -201,9 +201,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_CreateUnits: MessageObject, IActorMessage
 	{
-		public static M2C_CreateUnits Create(bool isFromPool = false) { return !isFromPool? new M2C_CreateUnits() : NetServices.Instance.FetchMessage(typeof(M2C_CreateUnits)) as M2C_CreateUnits; }
+		public static M2C_CreateUnits Create(bool isFromPool = false) { return !isFromPool? new M2C_CreateUnits() : ObjectPool.Instance.Fetch(typeof(M2C_CreateUnits)) as M2C_CreateUnits; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public List<UnitInfo> Units { get; set; }
@@ -214,9 +214,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_CreateMyUnit: MessageObject, IActorMessage
 	{
-		public static M2C_CreateMyUnit Create(bool isFromPool = false) { return !isFromPool? new M2C_CreateMyUnit() : NetServices.Instance.FetchMessage(typeof(M2C_CreateMyUnit)) as M2C_CreateMyUnit; }
+		public static M2C_CreateMyUnit Create(bool isFromPool = false) { return !isFromPool? new M2C_CreateMyUnit() : ObjectPool.Instance.Fetch(typeof(M2C_CreateMyUnit)) as M2C_CreateMyUnit; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public UnitInfo Unit { get; set; }
@@ -227,9 +227,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_StartSceneChange: MessageObject, IActorMessage
 	{
-		public static M2C_StartSceneChange Create(bool isFromPool = false) { return !isFromPool? new M2C_StartSceneChange() : NetServices.Instance.FetchMessage(typeof(M2C_StartSceneChange)) as M2C_StartSceneChange; }
+		public static M2C_StartSceneChange Create(bool isFromPool = false) { return !isFromPool? new M2C_StartSceneChange() : ObjectPool.Instance.Fetch(typeof(M2C_StartSceneChange)) as M2C_StartSceneChange; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long SceneInstanceId { get; set; }
@@ -243,9 +243,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_RemoveUnits: MessageObject, IActorMessage
 	{
-		public static M2C_RemoveUnits Create(bool isFromPool = false) { return !isFromPool? new M2C_RemoveUnits() : NetServices.Instance.FetchMessage(typeof(M2C_RemoveUnits)) as M2C_RemoveUnits; }
+		public static M2C_RemoveUnits Create(bool isFromPool = false) { return !isFromPool? new M2C_RemoveUnits() : ObjectPool.Instance.Fetch(typeof(M2C_RemoveUnits)) as M2C_RemoveUnits; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public List<long> Units { get; set; }
@@ -256,9 +256,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_PathfindingResult: MessageObject, IActorLocationMessage
 	{
-		public static C2M_PathfindingResult Create(bool isFromPool = false) { return !isFromPool? new C2M_PathfindingResult() : NetServices.Instance.FetchMessage(typeof(C2M_PathfindingResult)) as C2M_PathfindingResult; }
+		public static C2M_PathfindingResult Create(bool isFromPool = false) { return !isFromPool? new C2M_PathfindingResult() : ObjectPool.Instance.Fetch(typeof(C2M_PathfindingResult)) as C2M_PathfindingResult; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -272,9 +272,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_Stop: MessageObject, IActorLocationMessage
 	{
-		public static C2M_Stop Create(bool isFromPool = false) { return !isFromPool? new C2M_Stop() : NetServices.Instance.FetchMessage(typeof(C2M_Stop)) as C2M_Stop; }
+		public static C2M_Stop Create(bool isFromPool = false) { return !isFromPool? new C2M_Stop() : ObjectPool.Instance.Fetch(typeof(C2M_Stop)) as C2M_Stop; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -285,9 +285,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_PathfindingResult: MessageObject, IActorMessage
 	{
-		public static M2C_PathfindingResult Create(bool isFromPool = false) { return !isFromPool? new M2C_PathfindingResult() : NetServices.Instance.FetchMessage(typeof(M2C_PathfindingResult)) as M2C_PathfindingResult; }
+		public static M2C_PathfindingResult Create(bool isFromPool = false) { return !isFromPool? new M2C_PathfindingResult() : ObjectPool.Instance.Fetch(typeof(M2C_PathfindingResult)) as M2C_PathfindingResult; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public long Id { get; set; }
@@ -304,9 +304,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_Stop: MessageObject, IActorMessage
 	{
-		public static M2C_Stop Create(bool isFromPool = false) { return !isFromPool? new M2C_Stop() : NetServices.Instance.FetchMessage(typeof(M2C_Stop)) as M2C_Stop; }
+		public static M2C_Stop Create(bool isFromPool = false) { return !isFromPool? new M2C_Stop() : ObjectPool.Instance.Fetch(typeof(M2C_Stop)) as M2C_Stop; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int Error { get; set; }
@@ -327,9 +327,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2G_Ping: MessageObject, IRequest
 	{
-		public static C2G_Ping Create(bool isFromPool = false) { return !isFromPool? new C2G_Ping() : NetServices.Instance.FetchMessage(typeof(C2G_Ping)) as C2G_Ping; }
+		public static C2G_Ping Create(bool isFromPool = false) { return !isFromPool? new C2G_Ping() : ObjectPool.Instance.Fetch(typeof(C2G_Ping)) as C2G_Ping; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -340,9 +340,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_Ping: MessageObject, IResponse
 	{
-		public static G2C_Ping Create(bool isFromPool = false) { return !isFromPool? new G2C_Ping() : NetServices.Instance.FetchMessage(typeof(G2C_Ping)) as G2C_Ping; }
+		public static G2C_Ping Create(bool isFromPool = false) { return !isFromPool? new G2C_Ping() : ObjectPool.Instance.Fetch(typeof(G2C_Ping)) as G2C_Ping; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -362,9 +362,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_Test: MessageObject, IMessage
 	{
-		public static G2C_Test Create(bool isFromPool = false) { return !isFromPool? new G2C_Test() : NetServices.Instance.FetchMessage(typeof(G2C_Test)) as G2C_Test; }
+		public static G2C_Test Create(bool isFromPool = false) { return !isFromPool? new G2C_Test() : ObjectPool.Instance.Fetch(typeof(G2C_Test)) as G2C_Test; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 	}
 
@@ -373,9 +373,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_Reload: MessageObject, IRequest
 	{
-		public static C2M_Reload Create(bool isFromPool = false) { return !isFromPool? new C2M_Reload() : NetServices.Instance.FetchMessage(typeof(C2M_Reload)) as C2M_Reload; }
+		public static C2M_Reload Create(bool isFromPool = false) { return !isFromPool? new C2M_Reload() : ObjectPool.Instance.Fetch(typeof(C2M_Reload)) as C2M_Reload; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -392,9 +392,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_Reload: MessageObject, IResponse
 	{
-		public static M2C_Reload Create(bool isFromPool = false) { return !isFromPool? new M2C_Reload() : NetServices.Instance.FetchMessage(typeof(M2C_Reload)) as M2C_Reload; }
+		public static M2C_Reload Create(bool isFromPool = false) { return !isFromPool? new M2C_Reload() : ObjectPool.Instance.Fetch(typeof(M2C_Reload)) as M2C_Reload; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -412,9 +412,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2R_Login: MessageObject, IRequest
 	{
-		public static C2R_Login Create(bool isFromPool = false) { return !isFromPool? new C2R_Login() : NetServices.Instance.FetchMessage(typeof(C2R_Login)) as C2R_Login; }
+		public static C2R_Login Create(bool isFromPool = false) { return !isFromPool? new C2R_Login() : ObjectPool.Instance.Fetch(typeof(C2R_Login)) as C2R_Login; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -431,9 +431,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class R2C_Login: MessageObject, IResponse
 	{
-		public static R2C_Login Create(bool isFromPool = false) { return !isFromPool? new R2C_Login() : NetServices.Instance.FetchMessage(typeof(R2C_Login)) as R2C_Login; }
+		public static R2C_Login Create(bool isFromPool = false) { return !isFromPool? new R2C_Login() : ObjectPool.Instance.Fetch(typeof(R2C_Login)) as R2C_Login; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -460,9 +460,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2G_LoginGate: MessageObject, IRequest
 	{
-		public static C2G_LoginGate Create(bool isFromPool = false) { return !isFromPool? new C2G_LoginGate() : NetServices.Instance.FetchMessage(typeof(C2G_LoginGate)) as C2G_LoginGate; }
+		public static C2G_LoginGate Create(bool isFromPool = false) { return !isFromPool? new C2G_LoginGate() : ObjectPool.Instance.Fetch(typeof(C2G_LoginGate)) as C2G_LoginGate; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -479,9 +479,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_LoginGate: MessageObject, IResponse
 	{
-		public static G2C_LoginGate Create(bool isFromPool = false) { return !isFromPool? new G2C_LoginGate() : NetServices.Instance.FetchMessage(typeof(G2C_LoginGate)) as G2C_LoginGate; }
+		public static G2C_LoginGate Create(bool isFromPool = false) { return !isFromPool? new G2C_LoginGate() : ObjectPool.Instance.Fetch(typeof(G2C_LoginGate)) as G2C_LoginGate; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -501,9 +501,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_TestHotfixMessage: MessageObject, IMessage
 	{
-		public static G2C_TestHotfixMessage Create(bool isFromPool = false) { return !isFromPool? new G2C_TestHotfixMessage() : NetServices.Instance.FetchMessage(typeof(G2C_TestHotfixMessage)) as G2C_TestHotfixMessage; }
+		public static G2C_TestHotfixMessage Create(bool isFromPool = false) { return !isFromPool? new G2C_TestHotfixMessage() : ObjectPool.Instance.Fetch(typeof(G2C_TestHotfixMessage)) as G2C_TestHotfixMessage; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public string Info { get; set; }
@@ -515,9 +515,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_TestRobotCase: MessageObject, IActorLocationRequest
 	{
-		public static C2M_TestRobotCase Create(bool isFromPool = false) { return !isFromPool? new C2M_TestRobotCase() : NetServices.Instance.FetchMessage(typeof(C2M_TestRobotCase)) as C2M_TestRobotCase; }
+		public static C2M_TestRobotCase Create(bool isFromPool = false) { return !isFromPool? new C2M_TestRobotCase() : ObjectPool.Instance.Fetch(typeof(C2M_TestRobotCase)) as C2M_TestRobotCase; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -531,9 +531,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_TestRobotCase: MessageObject, IActorLocationResponse
 	{
-		public static M2C_TestRobotCase Create(bool isFromPool = false) { return !isFromPool? new M2C_TestRobotCase() : NetServices.Instance.FetchMessage(typeof(M2C_TestRobotCase)) as M2C_TestRobotCase; }
+		public static M2C_TestRobotCase Create(bool isFromPool = false) { return !isFromPool? new M2C_TestRobotCase() : ObjectPool.Instance.Fetch(typeof(M2C_TestRobotCase)) as M2C_TestRobotCase; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -553,9 +553,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
-		public static C2M_TestRobotCase2 Create(bool isFromPool = false) { return !isFromPool? new C2M_TestRobotCase2() : NetServices.Instance.FetchMessage(typeof(C2M_TestRobotCase2)) as C2M_TestRobotCase2; }
+		public static C2M_TestRobotCase2 Create(bool isFromPool = false) { return !isFromPool? new C2M_TestRobotCase2() : ObjectPool.Instance.Fetch(typeof(C2M_TestRobotCase2)) as C2M_TestRobotCase2; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -569,9 +569,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_TestRobotCase2: MessageObject, IActorLocationMessage
 	{
-		public static M2C_TestRobotCase2 Create(bool isFromPool = false) { return !isFromPool? new M2C_TestRobotCase2() : NetServices.Instance.FetchMessage(typeof(M2C_TestRobotCase2)) as M2C_TestRobotCase2; }
+		public static M2C_TestRobotCase2 Create(bool isFromPool = false) { return !isFromPool? new M2C_TestRobotCase2() : ObjectPool.Instance.Fetch(typeof(M2C_TestRobotCase2)) as M2C_TestRobotCase2; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -586,9 +586,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2M_TransferMap: MessageObject, IActorLocationRequest
 	{
-		public static C2M_TransferMap Create(bool isFromPool = false) { return !isFromPool? new C2M_TransferMap() : NetServices.Instance.FetchMessage(typeof(C2M_TransferMap)) as C2M_TransferMap; }
+		public static C2M_TransferMap Create(bool isFromPool = false) { return !isFromPool? new C2M_TransferMap() : ObjectPool.Instance.Fetch(typeof(C2M_TransferMap)) as C2M_TransferMap; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -599,9 +599,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class M2C_TransferMap: MessageObject, IActorLocationResponse
 	{
-		public static M2C_TransferMap Create(bool isFromPool = false) { return !isFromPool? new M2C_TransferMap() : NetServices.Instance.FetchMessage(typeof(M2C_TransferMap)) as M2C_TransferMap; }
+		public static M2C_TransferMap Create(bool isFromPool = false) { return !isFromPool? new M2C_TransferMap() : ObjectPool.Instance.Fetch(typeof(M2C_TransferMap)) as M2C_TransferMap; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -619,9 +619,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class C2G_Benchmark: MessageObject, IRequest
 	{
-		public static C2G_Benchmark Create(bool isFromPool = false) { return !isFromPool? new C2G_Benchmark() : NetServices.Instance.FetchMessage(typeof(C2G_Benchmark)) as C2G_Benchmark; }
+		public static C2G_Benchmark Create(bool isFromPool = false) { return !isFromPool? new C2G_Benchmark() : ObjectPool.Instance.Fetch(typeof(C2G_Benchmark)) as C2G_Benchmark; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }
@@ -632,9 +632,9 @@ namespace ET
 	[MemoryPackable]
 	public partial class G2C_Benchmark: MessageObject, IResponse
 	{
-		public static G2C_Benchmark Create(bool isFromPool = false) { return !isFromPool? new G2C_Benchmark() : NetServices.Instance.FetchMessage(typeof(G2C_Benchmark)) as G2C_Benchmark; }
+		public static G2C_Benchmark Create(bool isFromPool = false) { return !isFromPool? new G2C_Benchmark() : ObjectPool.Instance.Fetch(typeof(G2C_Benchmark)) as G2C_Benchmark; }
 
-		public override void Dispose() { NetServices.Instance.RecycleMessage(this); }
+		public override void Dispose() { ObjectPool.Instance.Recycle(this); }
 
 		[MemoryPackOrder(0)]
 		public int RpcId { get; set; }

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

@@ -24,7 +24,7 @@ namespace ET.Server
                 int rpcId = request.RpcId;
                 long instanceId = session.InstanceId;
 
-                Response response = NetServices.Instance.FetchMessage<Response>();
+                Response response = ObjectPool.Instance.Fetch<Response>();
 
                 try
                 {