/// <summary> /// Преобразует строку в экземпляр класса прокси-клиента, унаследованный от <see cref="ProxyClient"/>. /// </summary> /// <param name="proxyType">Тип прокси-сервера.</param> /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param> /// <returns>Экземпляр класса прокси-клиента, унаследованный от <see cref="ProxyClient"/>.</returns> /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception> /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception> /// <exception cref="System.FormatException">Формат порта является неправильным.</exception> /// <exception cref="System.InvalidOperationException">Получен неподдерживаемый тип прокси-сервера.</exception> protected static ProxyClient Parse(ProxyType proxyType, string proxyAddress) { #region Проверка параметров if (proxyAddress == null) { throw new ArgumentNullException("proxyAddress"); } if (proxyAddress.Length == 0) { throw ExceptionHelper.EmptyString("proxyAddress"); } #endregion var values = proxyAddress.Split(':'); var port = 0; var host = values[0]; if (values.Length >= 2) { #region Получение порта try { port = int.Parse(values[1]); } catch (Exception ex) { if (ex is FormatException || ex is OverflowException) { throw new FormatException( Resources.InvalidOperationException_ProxyClient_WrongPort, ex); } throw; } if (!ExceptionHelper.ValidateTcpPort(port)) { throw new FormatException( Resources.InvalidOperationException_ProxyClient_WrongPort); } #endregion } string username = null; string password = null; if (values.Length >= 3) { username = values[2]; } if (values.Length >= 4) { password = values[3]; } return(ProxyHelper.CreateProxyClient(proxyType, host, port, username, password)); }