internal bool TryMark(EndPoint endPoint, ProtocolTypes protocolTypes, ServerQuality quality) { lock ( listLock ) { ServerInfo[] serverInfos; if (quality == ServerQuality.Good) { serverInfos = servers.Where(x => x.Record.EndPoint.Equals(endPoint) && x.Protocol.HasFlagsFast(protocolTypes)).ToArray(); } else { // If we're marking this server for any failure, mark all endpoints for the host at the same time var host = NetHelpers.ExtractEndpointHost(endPoint).host; serverInfos = servers.Where(x => x.Record.GetHost().Equals(host)).ToArray(); } if (serverInfos.Length == 0) { return(false); } foreach (var serverInfo in serverInfos) { MarkServerCore(serverInfo, quality); } return(true); } }
internal bool TryMark(IPEndPoint endPoint, ServerQuality quality) { lock ( listLock ) { var serverInfo = servers.Where(x => x.EndPoint.Equals(endPoint)).SingleOrDefault(); if (serverInfo == null) { return(false); } MarkServerCore(serverInfo, quality); return(true); } }
internal bool TryMark(EndPoint endPoint, ProtocolTypes protocolTypes, ServerQuality quality) { lock ( listLock ) { var serverInfos = servers.Where(x => x.Record.EndPoint.Equals(endPoint) && x.Protocol.HasFlagsFast(protocolTypes)).ToArray(); if (serverInfos.Length == 0) { return(false); } foreach (var serverInfo in serverInfos) { MarkServerCore(serverInfo, quality); } return(true); } }
void MarkServerCore(ServerInfo serverInfo, ServerQuality quality) { switch (quality) { case ServerQuality.Good: { serverInfo.LastBadConnectionDateTimeUtc = null; break; } case ServerQuality.Bad: { serverInfo.LastBadConnectionDateTimeUtc = DateTime.UtcNow; break; } default: throw new ArgumentOutOfRangeException("quality"); } }
void MarkServerCore(ServerInfo serverInfo, ServerQuality quality) { switch (quality) { case ServerQuality.Good: { var newScore = Math.Min(Convert.ToInt32(serverInfo.Score * GoodWeighting), MaxScore); if (newScore > serverInfo.Score) { DebugWrite("{0} is good - increasing score from {1} to {2}.", serverInfo.EndPoint, serverInfo.Score, newScore); SetServerScore(serverInfo, newScore); } else { DebugWrite("{0} is good but has hit the score ceiling of {1}.", serverInfo.EndPoint, MaxScore); } break; } case ServerQuality.Bad: { var newScore = Math.Max(Convert.ToInt32(serverInfo.Score * BadWeighting), MinScore); if (newScore < serverInfo.Score) { DebugWrite("{0} is bad - dropping score from {1} to {2}.", serverInfo.EndPoint, serverInfo.Score, newScore); SetServerScore(serverInfo, newScore); } else { DebugWrite("{0} is bad but has hit the score floor of {1}.", serverInfo.EndPoint, MinScore); } break; } default: throw new ArgumentOutOfRangeException("quality"); } }
void MarkServerCore( ServerInfo serverInfo, ServerQuality quality ) { switch ( quality ) { case ServerQuality.Good: { var newScore = Math.Min( Convert.ToInt32( serverInfo.Score * GoodWeighting ), MaxScore ); if ( newScore > serverInfo.Score ) { DebugWrite( "{0} is good - increasing score from {1} to {2}.", serverInfo.EndPoint, serverInfo.Score, newScore ); SetServerScore( serverInfo, newScore ); } else { DebugWrite( "{0} is good but has hit the score ceiling of {1}.", serverInfo.EndPoint, MaxScore ); } break; } case ServerQuality.Bad: { var newScore = Math.Max( Convert.ToInt32( serverInfo.Score * BadWeighting ), MinScore ); if ( newScore < serverInfo.Score ) { DebugWrite( "{0} is bad - dropping score from {1} to {2}.", serverInfo.EndPoint, serverInfo.Score, newScore ); SetServerScore( serverInfo, newScore ); } else { DebugWrite( "{0} is bad but has hit the score floor of {1}.", serverInfo.EndPoint, MinScore ); } break; } default: throw new ArgumentOutOfRangeException( "quality" ); } }
internal bool TryMark( IPEndPoint endPoint, ServerQuality quality ) { lock ( listLock ) { var serverInfo = servers.Where( x => x.EndPoint.Equals( endPoint ) ).SingleOrDefault(); if ( serverInfo == null ) { return false; } MarkServerCore( serverInfo, quality ); return true; } }
void MarkServerCore( ServerInfo serverInfo, ServerQuality quality ) { switch ( quality ) { case ServerQuality.Good: { serverInfo.LastBadConnectionDateTimeUtc = null; break; } case ServerQuality.Bad: { serverInfo.LastBadConnectionDateTimeUtc = DateTime.UtcNow; break; } default: throw new ArgumentOutOfRangeException( "quality" ); } }