/// <summary> /// Преобразует строку в экземпляр класса прокси-клиента, унаследованный от <see cref="ProxyClient"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование. /// </summary> /// <param name="proxyType">Тип прокси-сервера.</param> /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param> /// <param name="result">Если преобразование выполнено успешно, то содержит экземпляр класса прокси-клиента, унаследованный от <see cref="ProxyClient"/>, иначе <see langword="null"/>.</param> /// <returns>Значение <see langword="true"/>, если параметр <paramref name="proxyAddress"/> преобразован успешно, иначе <see langword="false"/>.</returns> public static bool TryParse(string proxyType, string proxyAddress, out ProxyClient result) { result = null; #region Проверка параметров if (string.IsNullOrEmpty(proxyAddress)) { return(false); } #endregion ProxyType pt = ProxyType.Http; // Default value if (proxyType.Equals("HTTP")) { pt = ProxyType.Http; } else if (proxyType.Equals("SOCKS4")) { pt = ProxyType.Socks4; } else if (proxyType.Equals("SOCKS5")) { pt = ProxyType.Socks5; } string[] values = proxyAddress.Split(':'); int port = 0; string host = values[0]; if (values.Length >= 2) { if (!int.TryParse(values[1], out port) || !ExceptionHelper.ValidateTcpPort(port)) { return(false); } } string username = null; string password = null; if (values.Length >= 3) { username = values[2]; } if (values.Length >= 4) { password = values[3]; } try { result = ProxyHelper.CreateProxyClient(pt, host + ":" + port, username, password); } catch (InvalidOperationException) { return(false); } return(true); }
/// <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> public static ProxyClient Parse(string proxyType, string proxyAddress) { #region Проверка параметров if (proxyAddress == null) { throw new ArgumentNullException("proxyAddress"); } if (proxyAddress.Length == 0) { throw ExceptionHelper.EmptyString("proxyAddress"); } #endregion ProxyType pt = ProxyType.Http; // Default value if (proxyType.Equals("HTTP")) { pt = ProxyType.Http; } else if (proxyType.Equals("SOCKS4")) { pt = ProxyType.Socks4; } else if (proxyType.Equals("SOCKS5")) { pt = ProxyType.Socks5; } string[] values = proxyAddress.Split(':'); int port = 0; string 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(pt, host + ":" + port, username, password)); }