Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Parses URI into config parameters.
        /// The URI shall be in the following form:
        ///     `protocol://username@password@host1:port1,host2:port2,...?param1=abc&param2=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);
        }