| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
							- 
 
- using System.Collections.Concurrent;
 
- using NetCore;
 
- using NetCore.Protocol.MemoryPack;
 
- namespace NetServer.InternalServer;
 
- public class ServerLinkMnager
 
- {
 
-   
 
-     private Random _random = new Random(1);
 
-     public static ServerLinkMnager Instance
 
-     {
 
-         get
 
-         {
 
-             if (_serverLinkMnager == null)
 
-             {
 
-                 _serverLinkMnager = new ServerLinkMnager();
 
-             }
 
-             return _serverLinkMnager;
 
-         }
 
-     }
 
-     public static ServerLinkMnager _serverLinkMnager;
 
-     public class ServerInfo
 
-     {
 
-         public long serverId;
 
-         public IConnection ServerConnection;
 
-     }
 
-     public ConcurrentDictionary<int, ConcurrentDictionary<long, ServerInfo>> InternalLogicManagerDic =
 
-         new ConcurrentDictionary<int, ConcurrentDictionary<long, ServerInfo>>();
 
-     public void AddServerConnection(ServerType serverType, IConnection iConnection)
 
-     {
 
-         lock (InternalLogicManagerDic)
 
-         {
 
-           
 
-         
 
-             if (InternalLogicManagerDic.TryGetValue((int)serverType, out var serverDic))
 
-             {
 
-                 if (serverDic.TryGetValue( iConnection.ConnectionId, out var serverInfo))
 
-                 {
 
-                     Console.Error.WriteLine("重复添加了服务器");
 
-                 }
 
-                 else
 
-                 {
 
-                     serverDic.TryAdd( iConnection.ConnectionId, new ServerInfo()
 
-                     {
 
-                         serverId =  iConnection.ConnectionId,
 
-                         ServerConnection = iConnection
 
-                     });
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 serverDic = new ConcurrentDictionary<long, ServerInfo>();
 
-                 serverDic.TryAdd( iConnection.ConnectionId, new ServerInfo()
 
-                 {
 
-                     serverId =  iConnection.ConnectionId,
 
-                     ServerConnection = iConnection
 
-                 });
 
-                 InternalLogicManagerDic.TryAdd((int)serverType, serverDic);
 
-             }
 
-         }
 
-     }
 
-     public void RemoveServerConnection(ServerType serverType, long serverId)
 
-     {
 
-         lock (InternalLogicManagerDic)
 
-         {
 
-             if (InternalLogicManagerDic.TryGetValue((int)serverType, out var serverDic))
 
-             {
 
-                 if (serverDic.TryGetValue(serverId, out var serverInfo))
 
-                 {
 
-                     serverDic.TryRemove(serverId, out _);
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     public IConnection GetServerConnection(ServerType serverType, long serverId)
 
-     {
 
-         if (InternalLogicManagerDic.TryGetValue((int)serverType, out var serverDic))
 
-         {
 
-             if (serverDic.TryGetValue(serverId, out var serverInfo))
 
-             {
 
-                 return serverInfo.ServerConnection;
 
-             }
 
-         }
 
-         return null;
 
-     }
 
-     public IConnection GetServerConnection(ServerType serverType)
 
-     {
 
-         if (InternalLogicManagerDic.TryGetValue((int)serverType, out var serverDic))
 
-         {
 
-             int maxCount = serverDic.Count;
 
-             int index = _random.Next(0, maxCount);
 
-             int corrIndex = 0;
 
-             foreach (var VARIABLE in serverDic.Values)
 
-             {
 
-                 if (index == corrIndex)
 
-                 {
 
-                     return VARIABLE.ServerConnection;
 
-                 }
 
-                 corrIndex++;
 
-             }
 
-         }
 
-         return null;
 
-     }
 
- }
 
 
  |