private void ChangeMode()
 {
     try
     {
         var node      = _formView.ScopeNode as ManagementNode;
         var serverDto = new ServerDto {
             Server = node.DisplayName, Upn = node.ServerDto.Upn, Password = node.ServerDto.Password
         };
         PscHighAvailabilityAppEnvironment.Instance.Service.SetLegacyMode(!legacyMode, serverDto);
         _dto.Legacy = !legacyMode;
         btnHA.Text  = _dto.Legacy ? Constants.EnableDefaultHA : Constants.EnableLegacy;
         legacyMode  = _dto.Legacy;
         var state = _dto.Legacy ? CDC_DC_STATE.CDC_DC_STATE_LEGACY : CDC_DC_STATE.CDC_DC_STATE_NO_DC_LIST;
         _dto.State = CdcDcStateHelper.GetStateDescription(state);
     }
     catch (Exception exc)
     {
         PscHighAvailabilityAppEnvironment.Instance.Logger.LogException(exc);
         MiscUtilsService.ShowError(exc);
     }
     UpdateState();
 }
        /// <summary>
        /// Gets the management node details.
        /// </summary>
        /// <returns>The management node details.</returns>
        /// <param name="serverDto">Server dto.</param>
        public ManagementDto GetManagementNodeDetails(ServerDto serverDto)
        {
            var dto = new ManagementDto()
            {
                State = new StateDescriptionDto(), Name = serverDto.Server, Domain = serverDto.DomainName
            };

            using (Client client = new Client(serverDto.Server, serverDto.Upn, serverDto.Password))
            {
                var message = string.Format("Method: GetManagementNodeDetails - CdcGetCurrentState API call for Server: {0}", serverDto.Server);
                _logger.Log(message, LogLevel.Info);

                try
                {
                    var state = client.CdcGetCurrentState();
                    dto.Legacy = (state == CDC_DC_STATE.CDC_DC_STATE_LEGACY);
                    dto.State  = CdcDcStateHelper.GetStateDescription(state);
                    message    = string.Format("Method: GetManagementNodeDetails - CdcGetCurrentState API call for Server: {0} complete", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcGetCurrentState API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                }

                try
                {
                    message = string.Format("Method: GetManagementNodeDetails - VmAfdGetSiteName API call for Server: {0}", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);

                    dto.Sitename = client.VmAfdGetSiteName();

                    message = string.Format("Method: GetManagementNodeDetails - VmAfdGetSiteName API call for Server: {0} complete", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - VmAfdGetSiteName API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                }
                dto.Active = true;
                dto.Ip     = Network.GetIpAddress(dto.Name);

                message = string.Format("Method: GetManagementNodeDetails - CdcGetDCName API call for Server: {0}", serverDto.Server);
                _logger.Log(message, LogLevel.Info);

                try
                {
                    var dcInfo = client.CdcGetDCName(serverDto.DomainName, dto.Sitename, 0);

                    message = string.Format("Method: GetManagementNodeDetails - CdcGetDCName API call for Server: {0} complete", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);

                    dto.DomainController = new InfrastructureDto
                    {
                        Name     = dcInfo.pszDCName,
                        NodeType = NodeType.Infrastructure,
                        Domain   = dcInfo.pszDomainName
                    };
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcGetDCName API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                    dto.DomainController = new InfrastructureDto
                    {
                        Name     = string.Empty,
                        NodeType = NodeType.Infrastructure,
                        Domain   = string.Empty
                    };
                }
                dto.DomainControllers = new List <InfrastructureDto>();

                try
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcEnumDCEntries API call for Server: {0}", serverDto.Server);
                    _logger.Log(message, LogLevel.Info);
                    IList <string> entries = client.CdcEnumDCEntries();
                    message = string.Format("Method: GetManagementNodeDetails - CdcEnumDCEntries API call for Server: {0} complete. DCs returned: {1}", serverDto.Server, entries.Count());
                    _logger.Log(message, LogLevel.Info);
                    foreach (var entry in entries)
                    {
                        CDC_DC_STATUS_INFO     info;
                        VMAFD_HEARTBEAT_STATUS hbStatus;

                        try
                        {
                            message = string.Format("Method: GetManagementNodeDetails - CdcGetDCStatus API call for Server: {0}", serverDto.Server);
                            _logger.Log(message, LogLevel.Info);

                            client.CdcGetDCStatus(entry, string.Empty, out info, out hbStatus);
                            message = string.Format("Method: GetManagementNodeDetails - CdcGetDCStatus API call for Server: {0} complete", serverDto.Server);
                            _logger.Log(message, LogLevel.Info);

                            var infraDto = new InfrastructureDto()
                            {
                                Name     = entry,
                                Active   = info.bIsAlive == 1,
                                Sitename = info.pszSiteName,
                                LastPing = DateTimeConverter.FromUnixToDateTime(info.dwLastPing),
                                Services = new List <ServiceDto>()
                            };

                            if (hbStatus.info != null)
                            {
                                foreach (var serviceInfo in hbStatus.info)
                                {
                                    var service = new ServiceDto
                                    {
                                        ServiceName   = ServiceHelper.GetServiceName(serviceInfo.pszServiceName),
                                        Description   = ServiceHelper.GetServiceDescription(serviceInfo.pszServiceName),
                                        Alive         = serviceInfo.bIsAlive == 1,
                                        LastHeartbeat = DateTimeConverter.FromUnixToDateTime(serviceInfo.dwLastHeartbeat),
                                        Port          = serviceInfo.dwPort,
                                    };
                                    infraDto.Services.Add(service);
                                }
                            }
                            dto.DomainControllers.Add(infraDto);
                        }
                        catch (Exception exc)
                        {
                            message = string.Format("Method: GetManagementNodeDetails - CdcGetDCStatus API call for Server: {0} failed", serverDto.Server);
                            _logger.Log(message, LogLevel.Error);
                            _logger.LogException(exc);
                            dto.DomainController = new InfrastructureDto
                            {
                                Name     = string.Empty,
                                NodeType = NodeType.Infrastructure,
                                Domain   = string.Empty
                            };
                        }
                    }
                }
                catch (Exception exc)
                {
                    message = string.Format("Method: GetManagementNodeDetails - CdcEnumDCEntries API call for Server: {0} failed", serverDto.Server);
                    _logger.Log(message, LogLevel.Error);
                    _logger.LogException(exc);
                    dto.DomainController = new InfrastructureDto
                    {
                        Name     = string.Empty,
                        NodeType = NodeType.Infrastructure,
                        Domain   = string.Empty
                    };
                }
            }
            return(dto);
        }