private void MergeData() { CacheKeyInfo keyInfo = CacheKeyContants.CHAR_DATA_SNAPSHOT_KEY.BuildCacheInfo(PlayerManager.Instance.GetCharBaseData().CharId); CharacterDataSnapshot data = CacheManager.GetInsance().Get(keyInfo) as CharacterDataSnapshot; if (null != data) { foreach (var elem in data.DataList) { if (elem is CharBaseInfo) { m_CharInfo.CharBaseInfo = (CharBaseInfo)elem; } else if (elem is CharCounterInfo) { m_CharInfo.CharCounterInfo = (CharCounterInfo)elem; } else if (elem is CharBagInfo) { m_CharInfo.CharBagInfo = (CharBagInfo)elem; } else if (elem is CharMissionInfo) { m_CharInfo.CharMissionInfo = (CharMissionInfo)elem; } } } }
protected override void AfterRequest(SyncCharDataResponse resp) { CacheKeyInfo keyInfo = CacheKeyContants.CHAR_DATA_SNAPSHOT_KEY.BuildCacheInfo(PlayerManager.Instance.GetCharBaseData().CharId); CharacterDataSnapshot data = CacheManager.GetInsance().Get(keyInfo) as CharacterDataSnapshot; if (data == null) { return; } if (data.Version != SyncVersion) { return; } CacheManager.GetInsance().Del(keyInfo); }
protected override void Beat() { if (!m_bIsActive || (syncRequest != null && syncRequest.Running)) { return; } CacheKeyInfo keyInfo = CacheKeyContants.CHAR_DATA_SNAPSHOT_KEY.BuildCacheInfo(PlayerManager.Instance.GetCharBaseData().CharId); CharacterDataSnapshot data = CacheManager.GetInsance().Get(keyInfo) as CharacterDataSnapshot; if (data == null) { return; } SyncCharDataRequest request = new SyncCharDataRequest(); foreach (TBase tbase in data.DataList) { if (tbase is CharBaseInfo) { request.CharBaseInfo = tbase as CharBaseInfo; continue; } if (tbase is CharCounterInfo) { request.CharCounterInfo = tbase as CharCounterInfo; continue; } if (tbase is CharBagInfo) { request.CharBagInfo = tbase as CharBagInfo; continue; } if (tbase is CharMissionInfo) { request.CharMissionInfo = tbase as CharMissionInfo; continue; } } syncRequest = new AsyncSyncCharDataRequest(request); syncRequest.SyncVersion = data.Version; syncRequest.TryRequest(); }
public object Decode(NetWork.ByteBuffer buffer) { CharacterDataSnapshot data = new CharacterDataSnapshot(); byte flag = FLAG_END; do { flag = buffer.ReadByte(); switch (flag) { case FLAG_VERSION: data.Version = buffer.ReadLong(); break; case FLAG_DATA_LIST: { int size = buffer.ReadShort(); if (size == 0) { continue; } List <TBase> list = new List <TBase>(size); data.DataList = list; for (int i = 0; i < size; i++) { string className = buffer.ReadString(); byte[] tbaseBytes = new byte[buffer.ReadInt()]; buffer.ReadBytes(tbaseBytes, 0, tbaseBytes.Length); TBase tbase = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(className, false) as TBase; ThriftSerialize.DeSerialize(tbase, tbaseBytes); list.Add(tbase); } break; } } }while(flag != FLAG_END); return(data); }
public void Encode(NetWork.ByteBuffer buffer, object value) { CharacterDataSnapshot data = value as CharacterDataSnapshot; buffer.WriteByte(FLAG_VERSION); buffer.WriteLong(data.Version); buffer.WriteByte(FLAG_DATA_LIST); int size = data.DataList != null ? data.DataList.Count : 0; buffer.WriteShort((short)size); if (size > 0) { foreach (TBase tbase in data.DataList) { buffer.WriteString(tbase.GetType().FullName); byte[] tbaseBytes = ThriftSerialize.Serialize(tbase); buffer.WriteInt(tbaseBytes.Length); buffer.WriteBytes(tbaseBytes); } } buffer.WriteByte(FLAG_END); }
protected override void Beat() { List <TBase> updateList = null; while (true) { AbstractBusinessObject obj = UpdateManager.Instance.Poll(); if (obj == null) { break; } ICharDataConverter converter = ConverterManager.Instance.FindConverter(obj.GetType()); if (converter == null) { Debuger.LogError(string.Format("not found converter. type:{0}", obj.GetType())); continue; } TBase info = converter.Convert(obj); obj.ResetModify(); if (info == null) { Debuger.LogError(string.Format("convert result is null. type:{0}", obj.GetType())); continue; } if (updateList == null) { updateList = new List <TBase>(); } updateList.Add(info); } if (updateList != null) { CacheKeyInfo keyInfo = CacheKeyContants.CHAR_DATA_SNAPSHOT_KEY.BuildCacheInfo(PlayerManager.Instance.GetCharBaseData().CharId); CharacterDataSnapshot data = CacheManager.GetInsance().Get(keyInfo) as CharacterDataSnapshot; if (data == null) { data = new CharacterDataSnapshot(); data.Version = 0L; data.DataList = updateList; } else { data.Version += 1; List <TBase> delList = new List <TBase>(); for (int i = 0; i < updateList.Count; i++) { TBase newTbase = updateList[i]; for (int j = 0; j < data.DataList.Count; j++) { if (newTbase.GetType() == data.DataList[j].GetType()) { data.DataList[j] = newTbase; delList.Add(newTbase); break; } } } foreach (TBase delTbase in delList) { updateList.Remove(delTbase); } if (updateList.Count > 0) { data.DataList.AddRange(updateList); } } CacheManager.GetInsance().Set(keyInfo, data); } }