Esempio n. 1
0
        private async Task <GeoResult> GetGeoFromIPAddressesAsync(IEnumerable <string> ips)
        {
            foreach (var ip in ips)
            {
                if (String.IsNullOrEmpty(ip))
                {
                    continue;
                }

                var cacheValue = await _localCache.GetAsync <GeoResult>(ip).AnyContext();

                if (cacheValue.HasValue && cacheValue.IsNull)
                {
                    continue;
                }

                if (cacheValue.HasValue)
                {
                    return(cacheValue.Value);
                }

                var result = await _geoIpService.ResolveIpAsync(ip).AnyContext();

                if (result == null || !result.IsValid())
                {
                    await _localCache.SetAsync <GeoResult>(ip, null).AnyContext();

                    continue;
                }

                await _localCache.SetAsync(ip, result).AnyContext();

                return(result);
            }

            return(null);
        }