示例#1
0
    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;
                }
            }
        }
    }
示例#2
0
        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);
        }
示例#3
0
    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);
        }
示例#6
0
    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);
        }
    }