public static RawRabbitConfiguration Parse(string connectionString)
        {
            var cfg = new RawRabbitConfiguration();

            var brokersMatch = _brokers.Match(connectionString);
            var brokerStrs = brokersMatch.Groups["brokers"].Value.Split(',');

            foreach (var broker in brokerStrs)
            {
                int port;
                var brokerMatch = _broker.Match(broker);
                var brokerCfg = new BrokerConfiguration
                {
                    Hostname = brokerMatch.Groups["host"].Value,
                    VirtualHost = brokerMatch.Groups["vhost"].Value,
                    Port = int.TryParse(brokerMatch.Groups["port"].Value, out port) ? port : default(int),
                    Username = brokerMatch.Groups["user"].Value,
                    Password = brokerMatch.Groups["password"].Value,
                };
                cfg.Brokers.Add(brokerCfg);
            }

            var reqMatch = _requestTimeout.Match(connectionString);
            var timeoutGrp = reqMatch.Groups["timeout"];
            if (timeoutGrp.Success)
            {
                cfg.RequestTimeout = TimeSpan.FromSeconds(int.Parse(timeoutGrp.Value));
            }

            return cfg;
        }
 public SingleNodeBroker(BrokerConfiguration config = null)
 {
     config = config ?? BrokerConfiguration.Local;
     _factory = new ConnectionFactory
     {
         HostName = config.Hostname,
         VirtualHost = config.VirtualHost,
         Password = config.Password,
         UserName = config.Username
     };
     _connection = _factory.CreateConnection();
 }
        public IDictionary<string, object> GetClientProperties(RawRabbitConfiguration cfg = null, BrokerConfiguration brokerCfg = null)
        {
            var props = new Dictionary<string, object>
            {
                { "client_api", "RawRabbit" },
                { "client_version", typeof(BusClient).Assembly.GetName().Version.ToString() },
                { "client_directory", typeof(BusClient).Assembly.CodeBase},
                { "client_connected", DateTime.UtcNow.ToString("u") },
                { "client_server", Environment.MachineName },
            };
            if (brokerCfg != null)
            {
                props.Add("broker_username", brokerCfg.Username);
            }
            if (cfg != null)
            {
                props.Add("request_timeout", cfg.RequestTimeout.ToString("g"));
            }

            return props;
        }
 private static List<BrokerConfiguration> GetBrokers(IConfiguration root)
 {
     var result = new List<BrokerConfiguration>();
     var continueParsing = true;
     var index = 0;
     while (continueParsing)
     {
         int port;
         var broker = new BrokerConfiguration
         {
             Hostname = root[$"Data:RawRabbit:Brokers:{index}:Hostname"],
             VirtualHost = root[$"Data:RawRabbit:Brokers:{index}:VirtualHost"],
             Port = int.TryParse(root[$"Data:RawRabbit:Brokers:{index}:Port"], out port) ? port : default(int),
             Username = root[$"Data:RawRabbit:Brokers:{index}:Username"],
             Password = root[$"Data:RawRabbit:Brokers:{index}:Password"]
         };
         if (string.IsNullOrWhiteSpace(broker.Hostname))
         {
             continueParsing = false;
             continue;
         }
         result.Add(broker);
         index++;
     }
     return result;
 }