internal static IDictionary<string, string> ReadSettings(SettingsDictionary settings, ILogger logger)
{
IDictionary<string, string> config = new Dictionary<string, string>();
foreach (KeyValuePair<string, string> setting in settings)
{
string key = setting.Key;
if (key.Length > ConfigKeyPrefix.Length && key.StartsWith(ConfigKeyPrefix, StringComparison.OrdinalIgnoreCase))
{
// Extract receiver name
string receiver = key.Substring(ConfigKeyPrefix.Length);
// Parse values
string[] segments = setting.Value.SplitAndTrim(',');
foreach (string segment in segments)
{
string[] values = segment.SplitAndTrim('=');
if (values.Length == 1)
{
AddKey(config, logger, receiver, string.Empty, values[0]);
}
else if (values.Length == 2)
{
AddKey(config, logger, receiver, values[0], values[1]);
}
else
{
string msg = string.Format(CultureInfo.CurrentCulture, ReceiverResources.Config_BadValue, key);
logger.Error(msg);
throw new InvalidOperationException(msg);
}
}
}
}
if (config.Count == 0)
{
string format = ConfigKeyPrefix + "<receiver>";
string msg = string.Format(CultureInfo.CurrentCulture, ReceiverResources.Config_NoConfig, format);
logger.Error(msg);
}
return config;
}