private bool UploadConfigStateMachineAsync(NetworkDevice nDevice)
        {
            //NetworkDevice _netDevice = nDevice;
            int State = 0;

            while (State < 6)
            {
                switch (State)
                {
                case 0:
                    // Пингуем в цикле коммутатор по дефолтному адресу пока коммутатор не ответит на пинг
                    if (SendPing(DefaultIP))
                    {
                        State = 1;
                    }
                    break;

                case 1:
                    // Пытаемся в цикле подключиться по Telenet (сервер Telnet загружается через некоторое время после успешного пинга)
                    if (_telnetSender.CreateConnection(DefaultIP, _telnetPort, DefaultLogin, DefaultPassword))
                    {
                        State = 2;
                    }
                    break;

                case 2:
                    // Заливаем первую часть конфига в коммутатор по Telnet
                    _telnetSender.Send(nDevice, GetSettingsDict());
                    // Закрываем Telnet соединение
                    _telnetSender.CloseConnection();
                    State = 3;
                    break;

                case 3:
                    // Пытаемся в цикле подключиться к SSH-серверу
                    if (_sshSender.CreateConnection(nDevice.AddressIP, _sshPort, NewLogin, NewPassword))
                    {
                        State = 4;
                    }
                    break;

                case 4:
                    // Заливаем вторую часть конфига по SSH-протоколу
                    _sshSender.Send(nDevice, GetSettingsDict());
                    // Закрываем SSH-соединение
                    _sshSender.CloseConnection();
                    State = 5;
                    break;

                case 5:
                    // Пингуем в цикле коммутатор по новому IP-адресу (как только пинг пропал - коммутатор отключили)
                    if (!SendPing(nDevice.AddressIP))
                    {
                        State = 6;
                    }
                    break;

                case 6:
                    break;

                default:
                    break;
                }
                // Go to пункт 1
            }

            return(true);
        }
        public bool UploadConfigStateMachine(EthernetSwitch switchDevice,
                                             Dictionary <string, string> settings,
                                             CancellationToken token)
        {
            MessageToConsole("Waiting device...");
            Dictionary <string, string> _sDict = settings;
            int  State          = 0;
            bool IsSendComplete = false;

            while (State < 6 && !token.IsCancellationRequested)
            {
                switch (State)
                {
                case 0:
                    // Пингуем в цикле коммутатор по дефолтному адресу пока коммутатор не ответит на пинг
                    MessageForUser("Ожидание" + "\r\n" + "коммутатора");
                    if (SendMultiplePing(_sDict["DefaultIPAddress"], repitNumer))
                    {
                        State = 1;
                    }
                    break;

                case 1:
                    // Пытаемся в цикле подключиться по Telnet (сервер Telnet загружается через некоторое время после успешного пинга)
                    if (_telnetSender.CreateConnection(_sDict["DefaultIPAddress"],
                                                       _telnetPort, _sDict["DefaultAdminLogin"],
                                                       _sDict["DefaultAdminPassword"],
                                                       null))
                    {
                        State = 2;
                    }
                    break;

                case 2:
                    // Заливаем первую часть конфига в коммутатор по Telnet
                    MessageToConsole("Заливаем первую часть конфига в коммутатор по Telnet.");
                    _telnetSender.Send(switchDevice, _sDict);
                    // Закрываем Telnet соединение
                    _telnetSender.CloseConnection();
                    State = 3;
                    break;

                case 3:
                    // Пытаемся в цикле подключиться к SSH-серверу
                    if (_sshSender.CreateConnection(switchDevice.AddressIP,
                                                    _sshPort, _sDict["NewAdminLogin"],
                                                    _sDict["NewAdminPassword"],
                                                    RSAfile))
                    {
                        State = 4;
                    }
                    break;

                case 4:
                    // Заливаем вторую часть конфига по SSH-протоколу
                    MessageToConsole("Заливаем вторую часть конфига по SSH-протоколу.");
                    _sshSender.Send(switchDevice, _sDict);
                    // Закрываем SSH-соединение
                    _sshSender.CloseConnection();

                    MessageToConsole("Заливка конфига в коммутатор завершена.");
                    State = 5;
                    break;

                case 5:
                    // Пингуем в цикле коммутатор по новому IP-адресу (как только пинг пропал - коммутатор отключили)
                    MessageForUser("Замени" + "\r\n" + "коммутатор!");
                    if (!SendMultiplePing(switchDevice.AddressIP, repitNumer))
                    {
                        State = 6;
                    }
                    break;

                case 6:
                    IsSendComplete = true;
                    break;

                default:
                    break;
                }
                Thread.Sleep(100); // Слишком часто коммутатор лучше не долбить (может воспринять как атаку)
                // Go to state 0
            }
            return(IsSendComplete);
        }