Explorar o código

修复一个线程安全的bug NetServices的CreateAcceptChannelId不是线程安全的

tanghai %!s(int64=2) %!d(string=hai) anos
pai
achega
53847421a5

+ 0 - 5
Unity/Assets/Scripts/Core/Network/AService.cs

@@ -57,14 +57,9 @@ namespace ET
             this.pool.Enqueue(memoryBuffer);
         }
         
-        public AService()
-        {
-            NetServices.Instance.Add(this);
-        }
         
         public virtual void Dispose()
         {
-            NetServices.Instance?.Remove(this.Id);
         }
 
         public abstract void Update();

+ 2 - 30
Unity/Assets/Scripts/Core/Network/NetServices.cs

@@ -13,40 +13,12 @@ namespace ET
 
     public class NetServices: Singleton<NetServices>, ISingletonAwake
     {
-        private readonly ConcurrentDictionary<long, AService> services = new();
-        
         private long idGenerator;
         
         public void Awake()
         {
         }
 
-        protected override void Destroy()
-        {
-            foreach (var kv in this.services)
-            {
-                kv.Value.Dispose();
-            }
-        }
-
-        public void Add(AService aService)
-        {
-            aService.Id = Interlocked.Increment(ref this.idGenerator);
-            this.services[aService.Id] = aService;
-        }
-
-        public AService Get(long id)
-        {
-            AService aService;
-            this.services.TryGetValue(id, out aService);
-            return aService;
-        }
-
-        public void Remove(long id)
-        {
-            this.services.Remove(id, out AService _);
-        }
-
         // 这个因为是NetClientComponent中使用,不会与Accept冲突
         public uint CreateConnectChannelId()
         {
@@ -54,11 +26,11 @@ namespace ET
         }
 
         // 防止与内网进程号的ChannelId冲突,所以设置为一个大的随机数
-        private uint acceptIdGenerator = uint.MaxValue;
+        private int acceptIdGenerator = int.MinValue;
 
         public uint CreateAcceptChannelId()
         {
-            return --this.acceptIdGenerator;
+            return (uint)Interlocked.Add(ref this.acceptIdGenerator, 1);
         }
         
     }

+ 1 - 1
Unity/Assets/Scripts/Loader/ConfigLoader.cs.meta → Unity/Assets/Scripts/Loader/ConfigLoaderInvoker.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c3d36213fb9e6a44a924e9b26dcae1fe
+guid: 6855e4c29dfff194aa585cf9f2d4f860
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2