GyrosWorkshop/Wukong

View on GitHub
Wukong/Helpers/RedisConnectionUtil.cs

Summary

Maintainability
A
0 mins
Test Coverage
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using StackExchange.Redis;

namespace Wukong.Helpers
{
    public class RedisConnectionUtil
    {
        public static string RedisConnectionDnsLookup(string redisConnectionString)
        {
            if (string.IsNullOrEmpty(redisConnectionString)) return null;
            ConfigurationOptions config = ConfigurationOptions.Parse(redisConnectionString);

            DnsEndPoint addressEndpoint = config.EndPoints.First() as DnsEndPoint;
            int port = addressEndpoint.Port;

            bool isIp = IsIpAddress(addressEndpoint.Host);
            if (!isIp)
            {
                // Please Don't use this line in blocking context. Please remove ".Result"
                // Just for test purposes
                IPAddress ip = Dns.GetHostEntryAsync(addressEndpoint.Host).Result.AddressList.Last();
                return redisConnectionString.Replace(addressEndpoint.Host, ip.ToString());
            }
            else
            {
                return redisConnectionString;
            }
        }

        // A workaround method.
        private static bool IsIpAddress(string host)
        {
            string ipPattern = @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b";
            return Regex.IsMatch(host, ipPattern);
        }
    }
}