using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Sog; namespace Account { public class SnsFriendCacheOp : BaseReloadableService { private SnsFriendAccountInfoCache m_table; public override int GetServiceType() { return AccountServiceType.SnsFriendCacheOp; } //销毁的时候置空 public override void Dispose() { m_table = null; } public SnsFriendCacheOp(SnsFriendAccountInfoCache cacheTable) { m_table = cacheTable; } public SnsFriendInfoAccountObj GetSnsFriendInfo(string accountKey) { SnsFriendInfoAccountObj value; m_table.m_cacheTable.TryGetValue(accountKey, out value); return value; } public SnsFriendInfoAccountObj AddNewSnsFriendInfo(int accountType, string accountID) { string accountKey = AccountUtils.CalcAccountKey(accountType, accountID); SnsFriendInfoAccountObj value; if(m_table.m_cacheTable.TryGetValue(accountKey, out value)) { return value; } value = new SnsFriendInfoAccountObj(); value.Info.AccountType = accountType; value.Info.AccountID.SetString(accountID); m_table.m_cacheTable.Add(accountKey, value); return value; } public bool NeedQuerySnsFriendInfoFromDB(string accountKey) { SnsFriendInfoAccountObj snsFriendInfoInCache = GetSnsFriendInfo(accountKey); if(snsFriendInfoInCache == null) { return true; } //已经查询到uid了,不需要再次查询 if(snsFriendInfoInCache.Info.Uid > 0) { return false; } //否则,如果uid为0,那么一段时间后新玩家有可能来玩游戏了 //这个逻辑算是容错逻辑 if(AppTime.GetNowSysMs() > snsFriendInfoInCache.LastQueryDBTime + 3600*1000) { return true; } return false; } } }