Example #1
0
        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);
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
        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);
            }
        }
Example #4
0
        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");
            }
        }
Example #5
0
        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");
            }
        }
Example #6
0
        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" );
            }
        }
Example #7
0
 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;
     }
 }
Example #8
0
        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" );
            }
        }