예제 #1
0
        /// <summary>
        ///     Get an alliance from cache or database
        /// </summary>
        /// <param name="allianceId"></param>
        /// <param name="onlineOnly"></param>
        /// <returns></returns>
        public async Task <Alliance> GetAllianceAsync(long allianceId, bool onlineOnly = false)
        {
            lock (_syncObject)
            {
                if (ContainsKey(allianceId))
                {
                    return(this[allianceId]);
                }
            }

            if (onlineOnly)
            {
                return(null);
            }

            if (!Redis.IsConnected)
            {
                return(await AllianceDb.GetAsync(allianceId));
            }

            var alliance = await Redis.GetAllianceAsync(allianceId);

            if (alliance != null)
            {
                return(alliance);
            }

            alliance = await AllianceDb.GetAsync(allianceId);

            await Redis.CacheAsync(alliance);

            return(alliance);
        }
예제 #2
0
        public async Task <Alliance> GetAllianceAsync(long allianceId, bool onlineOnly = false)
        {
            lock (_syncObject)
            {
                if (ContainsKey(allianceId))
                {
                    return(this[allianceId]);
                }
            }

            if (onlineOnly)
            {
                return(null);
            }

            var alliance = Resources.ObjectCache.GetCachedAlliance(allianceId);

            if (alliance != null)
            {
                return(alliance);
            }

            alliance = await AllianceDb.GetAsync(allianceId);

            Resources.ObjectCache.CacheAlliance(alliance);

            return(alliance);
        }