/// <summary> /// 查找匹配服务位置 /// </summary> /// <param name="server"></param> /// <returns></returns> private int indexOf(ServerLog server) { if (Servers.Length == 0) { return(-1); } int count = Servers.Length; ServerLog[] serverArray = Servers.Array; foreach (ServerLog nextServer in serverArray) { if (server.HostPortEquals(nextServer)) { return(Servers.Length - count); } if (--count == 0) { return(-1); } } return(-1); }
/// <summary> /// 移除 TCP 服务注册信息 /// </summary> /// <param name="server"></param> /// <returns>主服务是否被修改</returns> internal bool Remove(ServerLog server) { if (Server != null) { if (server.HostPortEquals(Server)) { if (server.Random == Server.Random) { Server = Servers.Length == 0 ? null : Servers.Array[--Servers.Length]; return(true); } } else { int index = indexOf(server); if (index >= 0 && server.Random == Servers.Array[index].Random) { Servers.Array[index] = Servers.Array[--Servers.Length]; } } } return(false); }
/// <summary> /// 添加 TCP 服务注册信息 /// </summary> /// <param name="server"></param> /// <param name="isMainChanged">主服务是否被修改</param> /// <returns>日志是否需要推送到客户端</returns> internal bool Add(ServerLog server, out bool isMainChanged) { if (Server == null) { Server = server; return(isMainChanged = true); } server.Name = Server.Name; if (server.IsSingle ^ Server.IsSingle) { AutoCSer.LogHelper.Warn("TCP 服务 " + server.Name + " 单实例定义冲突 " + server.IsSingle.ToString(), LogLevel.Warn | LogLevel.AutoCSer); } if (server.HostPortEquals(Server)) { if (server.Random == Server.Random) { return(isMainChanged = false); } if (server.IsSingle) { Servers.Length = 0; } Server = server; isMainChanged = false; return(true); } if (server.IsSingle || Server.IsSingle) { Servers.Length = 0; Server = server; return(isMainChanged = true); } int index = indexOf(server); if (!Server.IsMain || server.IsMain) { Server.IsMain = false; if (index < 0) { Servers.Add(Server); } else { Servers.Array[index] = Server; } Server = server; return(isMainChanged = true); } isMainChanged = false; if (index < 0) { Servers.Add(server); return(true); } if (server.Random == Servers.Array[index].Random) { return(false); } Servers.Array[index] = server; return(true); }