private ConfigParams ComposeOptions(List <ConnectionParams> connections, CredentialParams credential) { credential = credential ?? new CredentialParams(); // Construct options and copy over credentials var options = new ConfigParams().SetDefaults(credential); var globalUri = ""; var uriBuilder = new StringBuilder(); // Process connections, find or construct uri foreach (var connection in connections) { options = options.SetDefaults(connection); if (globalUri != "") { continue; } var uri = connection.Uri; if (!string.IsNullOrEmpty(uri)) { globalUri = uri; continue; } if (uriBuilder.Length > 0) { uriBuilder.Append(","); } var protocol = connection.GetProtocolWithDefault("nats"); uriBuilder.Append(protocol); var host = connection.Host; uriBuilder.Append("://"); uriBuilder.Append(host); var port = connection.GetAsIntegerWithDefault("port", 4222); uriBuilder.Append(":"); uriBuilder.Append(port.ToString()); } // Set connection uri if (globalUri != "") { options.SetAsObject("uri", globalUri); } else { options.SetAsObject("uri", uriBuilder.ToString()); } return(options); }
/// <summary> /// Includes specified keys from the config parameters. /// </summary> /// <param name="options">configuration parameters to be processed.</param> /// <param name="keys">a list of keys to be included.</param> /// <returns>a processed config parameters.</returns> public static ConfigParams Include(ConfigParams options, params string[] keys) { if (keys == null || keys.Length == 0) { return(options); } var result = new ConfigParams(); foreach (var key in options.Keys) { if (((IList <string>)keys).Contains(key)) { result.SetAsObject(key, options.GetAsString(key)); } } return(result); }
/// <summary> /// Parses URI into config parameters. /// The URI shall be in the following form: /// `protocol://username@password@host1:port1,host2:port2,...?param1=abc¶m2=xyz&...` /// </summary> /// <param name="uri">the URI to be parsed</param> /// <param name="defaultProtocol">a default protocol</param> /// <param name="defaultPort">a default port</param> /// <returns>a configuration parameters with URI elements</returns> public static ConfigParams ParseUri(string uri, string defaultProtocol, int defaultPort) { var options = new ConfigParams(); if (uri == null || uri == "") { return(options); } uri = uri.Trim(); // Process parameters int pos = uri.IndexOf("?"); if (pos > 0) { var parameters = uri.Substring(pos + 1); uri = uri.Substring(0, pos); var paramsList = parameters.Split('&'); foreach (var param in paramsList) { pos = param.IndexOf("="); if (pos >= 0) { var key = Uri.UnescapeDataString(param.Substring(0, pos)); var value = Uri.UnescapeDataString(param.Substring(pos + 1)); options.SetAsObject(key, value); } else { options.SetAsObject(Uri.UnescapeDataString(param), null); } } } // Process protocol pos = uri.IndexOf("://"); if (pos > 0) { var protocol = uri.Substring(0, pos); uri = uri.Substring(pos + 3); options.SetAsObject("protocol", protocol); } else { options.SetAsObject("protocol", defaultProtocol); } // Process user and password pos = uri.IndexOf("@"); if (pos > 0) { var userAndPass = uri.Substring(0, pos); uri = uri.Substring(pos + 1); pos = userAndPass.IndexOf(":"); if (pos > 0) { options.SetAsObject("username", userAndPass.Substring(0, pos)); options.SetAsObject("password", userAndPass.Substring(pos + 1)); } else { options.SetAsObject("username", userAndPass); } } // Process host and ports var servers = uri.Split(','); foreach (var server in servers) { pos = server.IndexOf(":"); if (pos > 0) { options.SetAsObject("servers", ConnectionUtils.ConcatValues(options.GetAsString("servers"), server)); options.SetAsObject("host", ConnectionUtils.ConcatValues(options.GetAsString("host"), server.Substring(0, pos))); options.SetAsObject("port", ConnectionUtils.ConcatValues(options.GetAsString("port"), server.Substring(pos + 1))); } else { options.SetAsObject("servers", ConnectionUtils.ConcatValues(options.GetAsString("servers"), server + ":" + defaultPort.ToString())); options.SetAsObject("host", ConnectionUtils.ConcatValues(options.GetAsString("host"), server)); options.SetAsObject("port", ConnectionUtils.ConcatValues(options.GetAsString("port"), defaultPort.ToString())); } } return(options); }
private ConfigParams ComposeOptions(List <ConnectionParams> connections, CredentialParams credential) { credential = credential ?? new CredentialParams(); // Construct options and copy over credentials var options = new ConfigParams().SetDefaults(credential); var globalUri = ""; var serversBuilder = new StringBuilder(); // Process connections, find or construct uri foreach (var connection in connections) { options = options.SetDefaults(connection); if (globalUri != "") { continue; } var uri = connection.Uri; if (!string.IsNullOrEmpty(uri)) { globalUri = uri; continue; } if (serversBuilder.Length > 0) { serversBuilder.Append(","); } var host = connection.Host; serversBuilder.Append(host); var port = connection.GetAsIntegerWithDefault("port", 1883); serversBuilder.Append(":"); serversBuilder.Append(port.ToString()); } // Set connection uri if (globalUri != "") { var pos = globalUri.IndexOf("://"); if (pos > 0) { globalUri = globalUri.Substring(pos + 3); } pos = globalUri.IndexOf("@"); if (pos > 0) { var userPass = globalUri.Substring(0, pos); globalUri = globalUri.Substring(pos + 1); pos = userPass.IndexOf(":"); if (pos > 0) { var username = userPass.Substring(0, pos); options.SetAsObject("username", username); var password = userPass.Substring(pos + 1); options.SetAsObject("password", password); } else { options.SetAsObject("username", userPass); } } pos = globalUri.IndexOf("?"); if (pos > 0) { globalUri = globalUri.Substring(0, pos); } options.SetAsObject("servers", globalUri); } else { options.SetAsObject("servers", serversBuilder.ToString()); } return(options); }