internal static RunspaceServerSettings CreateRunspaceServerSettings(string partitionFqdn, bool forestWideAffinityRequested = false)
        {
            ADRunspaceServerSettingsProvider instance = ADRunspaceServerSettingsProvider.GetInstance();
            bool                   flag;
            ADServerInfo           gcFromToken            = instance.GetGcFromToken(partitionFqdn, null, out flag, forestWideAffinityRequested);
            RunspaceServerSettings runspaceServerSettings = new RunspaceServerSettings(partitionFqdn, gcFromToken, instance.GetConfigDc(partitionFqdn));

            if (flag)
            {
                runspaceServerSettings.AddPreferredDC(gcFromToken);
            }
            return(runspaceServerSettings);
        }
        // Token: 0x0600059C RID: 1436 RVA: 0x0001F25C File Offset: 0x0001D45C
        internal virtual bool TryFailover(out ADServerSettings newServerSettings, out string failToFailOverReason, bool forestWideAffinityRequested = false)
        {
            if (this.EnforceIsUpdatableByADSession && !this.IsUpdatableByADSession)
            {
                throw new NotSupportedException("TryFailover is not supported on " + base.GetType().Name);
            }
            bool result = true;

            failToFailOverReason = null;
            ADServerSettings adserverSettings         = (ADServerSettings)this.Clone();
            ADRunspaceServerSettingsProvider instance = ADRunspaceServerSettingsProvider.GetInstance();
            string token = adserverSettings.Token;

            foreach (Fqdn fqdn in adserverSettings.serversDown)
            {
                adserverSettings.RemovePreferredDC(fqdn);
                try
                {
                    List <string> list = new List <string>();
                    foreach (KeyValuePair <string, Fqdn> keyValuePair in adserverSettings.preferredGlobalCatalog)
                    {
                        if (string.Equals(fqdn, keyValuePair.Value, StringComparison.OrdinalIgnoreCase))
                        {
                            string key = keyValuePair.Key;
                            list.Add(key);
                        }
                    }
                    foreach (string partitionFqdn in list)
                    {
                        ExTraceGlobals.ServerSettingsProviderTracer.TraceDebug <string>((long)instance.GetHashCode(), "GetGcOnlyRunspaceServerSettings for token {0}", token ?? "<null>");
                        bool         flag;
                        ADServerInfo gcFromToken = instance.GetGcFromToken(partitionFqdn, token, out flag, forestWideAffinityRequested);
                        adserverSettings.SetPreferredGlobalCatalog(partitionFqdn, gcFromToken);
                        if (adserverSettings.Token != null)
                        {
                            adserverSettings.SetConfigurationDomainController(partitionFqdn, gcFromToken);
                        }
                        if (adserverSettings.Token != null || flag)
                        {
                            adserverSettings.AddPreferredDC(gcFromToken);
                        }
                    }
                }
                catch (ADTransientException ex)
                {
                    failToFailOverReason = ex.ToString();
                    result = false;
                }
                catch (ADExternalException ex2)
                {
                    failToFailOverReason = ex2.ToString();
                    result = false;
                }
                if (token == null)
                {
                    List <string> list2 = new List <string>();
                    foreach (KeyValuePair <string, Fqdn> keyValuePair2 in adserverSettings.configurationDomainController)
                    {
                        if (string.Equals(fqdn, keyValuePair2.Value, StringComparison.OrdinalIgnoreCase))
                        {
                            string key2 = keyValuePair2.Key;
                            list2.Add(key2);
                        }
                    }
                    foreach (string text in list2)
                    {
                        ADServerInfo configDc = instance.GetConfigDc(text);
                        if (configDc != null)
                        {
                            adserverSettings.SetConfigurationDomainController(text, configDc);
                        }
                    }
                }
            }
            adserverSettings.serversDown.Clear();
            newServerSettings = adserverSettings;
            return(result);
        }