Ejemplo n.º 1
0
        //--------------------------------------------------------------------------------------------------------------------------
        // 供外部直接调用的方法,实际执行线程是调用线程。
        //--------------------------------------------------------------------------------------------------------------------------
        internal void DSPSaveCreateUser(AccountInfo ai, string nickname, ulong userGuid)
        {
            try {
                TableAccount dataAccount = new TableAccount();
                dataAccount.AccountId = ai.AccountId;
                //dataAccount.IsBanned = ai.IsBanned;
                //dataAccount.UserGuid = ai.UserGuid;
                Msg_LD_Save msg = new Msg_LD_Save();
                msg.MsgId = (int)DataEnum.TableAccount;
                msg.PrimaryKeys.Add(dataAccount.AccountId);
                msg.Data = DbDataSerializer.Encode(dataAccount);
                DispatchAction(DSSaveInternal, msg);

                TableNicknameInfo dataNickname = new TableNicknameInfo();
                dataNickname.Nickname = nickname;
                dataNickname.UserGuid = userGuid;
                Msg_LD_Save msgNickname = new Msg_LD_Save();
                msgNickname.MsgId = (int)DataEnum.TableNicknameInfo;
                msgNickname.PrimaryKeys.Add(dataNickname.Nickname);
                msgNickname.Data = DbDataSerializer.Encode(dataNickname);
                DispatchAction(DSSaveInternal, msgNickname);
            } catch (Exception e) {
                LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR. Msg:DSP_CreateUser, Key:{0}, Error:{1},\nStacktrace:{2}", ai.AccountId, e.Message, e.StackTrace);
            }
        }
Ejemplo n.º 2
0
 internal void SaveMail(List <TableMailInfoWrap> mailList, int saveCount)
 {
     try {
         foreach (var mailInfo in mailList)
         {
             if (!mailInfo.Modified)
             {
                 continue;
             }
             TableMailInfo dataMail = mailInfo.ToProto();
             List <int>    itemIds  = new List <int>();
             List <int>    itemNums = new List <int>();
             foreach (var item in mailInfo.m_Items)
             {
                 itemIds.Add(item.m_ItemId);
                 itemNums.Add(item.m_ItemNum);
             }
             dataMail.ItemIds     = Converter.IntList2String(itemIds);
             dataMail.ItemNumbers = Converter.IntList2String(itemNums);
             Msg_LD_Save msg = new Msg_LD_Save();
             msg.MsgId = (int)DataEnum.TableMailInfo;
             msg.PrimaryKeys.Add(dataMail.Guid.ToString());
             msg.Data = DbDataSerializer.Encode(dataMail);
             DispatchAction(SaveInternal, msg);
         }
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
     }
 }
Ejemplo n.º 3
0
 internal void RequestSave(Msg_LD_Save msg, MyAction <Msg_DL_SaveResult> callback = null)
 {
     lock (m_SaveRequestQueuesLock) {
         msg.SerialNo = GenNextSerialNo();
         KeyString key = KeyString.Wrap(msg.PrimaryKeys);
         ConcurrentDictionary <KeyString, ConcurrentQueue <SaveRequestInfo> > dict;
         if (!m_SaveRequestQueues.TryGetValue(msg.MsgId, out dict))
         {
             dict = m_SaveRequestQueues.AddOrUpdate(msg.MsgId, new ConcurrentDictionary <KeyString, ConcurrentQueue <SaveRequestInfo> >(), (k, v) => v);
         }
         ConcurrentQueue <SaveRequestInfo> queue;
         if (!dict.TryGetValue(key, out queue))
         {
             queue = dict.AddOrUpdate(key, new ConcurrentQueue <SaveRequestInfo>(), (k, v) => v);
         }
         SaveRequestInfo info = m_SaveRequestPool.Alloc();
         info.m_Request  = msg;
         info.m_Callback = callback;
         if (queue.Count == 0)
         {
             //当前队列为空时直接发送消息
             info.m_LastSendTime = TimeUtility.GetLocalMilliseconds();
             m_DataStoreChannel.Send(msg);
         }
         queue.Enqueue(info);
     }
 }
Ejemplo n.º 4
0
 internal int DeleteGlobalData(string key)
 {
     try {
         Msg_LD_Save msg = new Msg_LD_Save();
         msg.MsgId = (int)DataEnum.TableGlobalData;
         msg.PrimaryKeys.Add(key);
         msg.ForeignKeys.Clear();
         msg.Data = null;
         RequestSave(msg);
         return(0);
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
         return(0);
     }
 }
Ejemplo n.º 5
0
 internal int SaveGlobalData(TableGlobalData data)
 {
     try {
         Msg_LD_Save msg = new Msg_LD_Save();
         msg.MsgId = (int)DataEnum.TableGlobalData;
         msg.PrimaryKeys.Add(data.Key);
         msg.ForeignKeys.Clear();
         msg.Data = DbDataSerializer.Encode(data);
         RequestSave(msg);
         return(0);
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
         return(0);
     }
 }
Ejemplo n.º 6
0
 internal void SaveGuid(string guidType, ulong guidValue)
 {
     try {
         TableGuid dataGuid = new TableGuid();
         dataGuid.GuidType  = guidType;
         dataGuid.GuidValue = guidValue;
         Msg_LD_Save msg = new Msg_LD_Save();
         msg.MsgId = (int)DataEnum.TableGuid;
         msg.PrimaryKeys.Add(dataGuid.GuidType);
         msg.Data = DbDataSerializer.Encode(dataGuid);
         DispatchAction(SaveInternal, msg);
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
     }
 }
Ejemplo n.º 7
0
 internal int DSGSaveNickname(TableNicknameInfo nick)
 {
     try {
         Msg_LD_Save msg = new Msg_LD_Save();
         msg.MsgId = (int)DataEnum.TableNicknameInfo;
         msg.PrimaryKeys.Add(nick.Nickname);
         msg.ForeignKeys.Clear();
         msg.Data = DbDataSerializer.Encode(nick);
         RequestSave(msg);
         return(0);
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
         return(0);
     }
 }
Ejemplo n.º 8
0
 internal void SaveGuid(List <GuidInfo> guidList, int saveCount)
 {
     try {
         foreach (var guidinfo in guidList)
         {
             TableGuid dataGuid = new TableGuid();
             dataGuid.GuidType  = guidinfo.GuidType;
             dataGuid.GuidValue = (ulong)guidinfo.NextGuid;
             Msg_LD_Save msg = new Msg_LD_Save();
             msg.MsgId = (int)DataEnum.TableGuid;
             msg.PrimaryKeys.Add(dataGuid.GuidType);
             msg.Data = DbDataSerializer.Encode(dataGuid);
             DispatchAction(SaveInternal, msg);
         }
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
     }
 }
Ejemplo n.º 9
0
 internal void SaveDeletedMail(List <TableMailInfoWrap> mailList, int saveCount)
 {
     try {
         foreach (var mailInfo in mailList)
         {
             if (!mailInfo.Deleted)
             {
                 continue;
             }
             Msg_LD_Save msg = new Msg_LD_Save();
             msg.MsgId = (int)DataEnum.TableMailInfo;
             msg.PrimaryKeys.Add(mailInfo.Guid.ToString());
             msg.Data = null;
             DispatchAction(SaveInternal, msg);
         }
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
     }
 }
Ejemplo n.º 10
0
 //--------------------------------------------------------------------------------------------------------------------------
 //供内部通过DispatchAction(调用的方法,实际执行线程是DataCacheThread。
 //--------------------------------------------------------------------------------------------------------------------------
 private void DSSaveInternal(Msg_LD_Save msg)
 {
     try {
         RequestSave(msg, (ret) => {
             KeyString primaryKey = KeyString.Wrap(msg.PrimaryKeys);
             if (ret.ErrorNo == Msg_DL_SaveResult.ErrorNoEnum.Success)
             {
                 LogSys.Log(LOG_TYPE.INFO, "Save data success. MsgId:{0}, SerialNo:{1}, Key:{2}", msg.MsgId, msg.SerialNo, primaryKey);
             }
             else
             {
                 LogSys.Log(LOG_TYPE.ERROR, "Save data failed. MsgId:{0}, SerialNo:{1}, Key:{2}, Error:{3}, ErrorInfo:{4}",
                            msg.MsgId, msg.SerialNo, primaryKey, ret.ErrorNo, ret.ErrorInfo);
             }
         });
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR:{0}, Stacktrace:{1}", e.Message, e.StackTrace);
     }
 }
Ejemplo n.º 11
0
 internal void DSPSaveUser(UserInfo ui, int saveCount)
 {
     try {
         ulong  userGuid = ui.Guid;
         string key      = userGuid.ToString();
         if (ui.Modified)
         {
             Msg_LD_Save msg = new Msg_LD_Save();
             msg.MsgId = (int)DataEnum.TableUserInfo;
             msg.PrimaryKeys.AddRange(ui.PrimaryKeys);
             msg.ForeignKeys.AddRange(ui.ForeignKeys);
             msg.Data = DbDataSerializer.Encode(ui.ToProto());
             DispatchAction(DSSaveInternal, msg);
             ui.Modified = false;
         }
         ui.CurrentUserSaveCount = saveCount;
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR. Msg:DSP_User, Key:{0}, SaveCount:{1}, Error:{2},\nStacktrace:{3}", ui.Guid, saveCount, e.Message, e.StackTrace);
     }
 }
Ejemplo n.º 12
0
    private void DSSaveHandler(Msg_LD_Save msg, PBChannel channel, int handle, uint seq)
    {
        var saveResult = new Msg_DL_SaveResult();

        saveResult.MsgId = msg.MsgId;
        saveResult.PrimaryKeys.AddRange(msg.PrimaryKeys);
        saveResult.SerialNo  = msg.SerialNo;
        saveResult.ErrorNo   = Msg_DL_SaveResult.ErrorNoEnum.Success;
        saveResult.ErrorInfo = string.Empty;
        try {
            //写入数据缓存
            //TODO:是否将byte[]解析出protobuf对象? 提前反序列化成对象的好处:1.若数据有错误,反序列化失败,可反馈给lobby;2.protobuf对象可重用?
            //TODO:解析primaryKey和foreignKey
            DataCacheSystem.Instance.SaveActionQueue.QueueAction(DataCacheSystem.Instance.Save, msg.MsgId, msg.PrimaryKeys, msg.ForeignKeys, msg.Data, msg.SerialNo);
        } catch (Exception e) {
            saveResult.ErrorNo   = Msg_DL_SaveResult.ErrorNoEnum.PostError;
            saveResult.ErrorInfo = e.Message;
            LogSys.Log(LOG_TYPE.ERROR, "Save data ERROR: MsgId:{0}, Key:{1}, Error:{2}, Detail:{3}", msg.MsgId, msg.PrimaryKeys, e.Message, e.StackTrace);
        }
        channel.Send(saveResult);
    }
Ejemplo n.º 13
0
 internal void SaveUser(UserInfo ui, int saveCount)
 {
     try {
         ulong  userGuid = ui.Guid;
         string key      = userGuid.ToString();
         if (ui.Modified)
         {
             Msg_LD_Save msg = new Msg_LD_Save();
             msg.MsgId = (int)DataEnum.TableUserInfo;
             msg.PrimaryKeys.AddRange(ui.PrimaryKeys);
             msg.ForeignKeys.AddRange(ui.ForeignKeys);
             msg.Data = DbDataSerializer.Encode(ui.ToProto());
             DispatchAction(SaveInternal, msg);
             ui.Modified = false;
         }
         foreach (var pair in ui.MailStateInfo.WholeMailStates)
         {
             var mi = pair.Value;
             if (mi.Modified)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableMailStateInfo;
                 msg.PrimaryKeys.AddRange(mi.PrimaryKeys);
                 msg.ForeignKeys.AddRange(mi.ForeignKeys);
                 msg.Data = DbDataSerializer.Encode(mi.ToProto());
                 DispatchAction(SaveInternal, msg);
                 mi.Modified = false;
             }
         }
         foreach (var mi in ui.MailStateInfo.DeletedWholeMailStates)
         {
             if (mi.Deleted)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableMailStateInfo;
                 msg.PrimaryKeys.AddRange(mi.PrimaryKeys);
                 msg.ForeignKeys.AddRange(mi.ForeignKeys);
                 msg.Data = null;
                 DispatchAction(SaveInternal, msg);
                 mi.Deleted = false;
             }
         }
         ui.MailStateInfo.DeletedWholeMailStates.Clear();
         foreach (var mi in ui.MemberInfos)
         {
             if (mi.Modified)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableMemberInfo;
                 msg.PrimaryKeys.AddRange(mi.PrimaryKeys);
                 msg.ForeignKeys.AddRange(mi.ForeignKeys);
                 msg.Data = DbDataSerializer.Encode(mi.ToProto());
                 DispatchAction(SaveInternal, msg);
                 mi.Modified = false;
             }
         }
         foreach (var mi in ui.DeletedMemberInfos)
         {
             if (mi.Deleted)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableMemberInfo;
                 msg.PrimaryKeys.AddRange(mi.PrimaryKeys);
                 msg.ForeignKeys.AddRange(mi.ForeignKeys);
                 msg.Data = null;
                 DispatchAction(SaveInternal, msg);
                 mi.Deleted = false;
             }
         }
         ui.DeletedMemberInfos.Clear();
         foreach (var ii in ui.ItemBag.ItemInfos)
         {
             if (ii.Modified)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableItemInfo;
                 msg.PrimaryKeys.AddRange(ii.PrimaryKeys);
                 msg.ForeignKeys.AddRange(ii.ForeignKeys);
                 msg.Data = DbDataSerializer.Encode(ii.ToProto());
                 DispatchAction(SaveInternal, msg);
                 ii.Modified = false;
             }
         }
         foreach (var ii in ui.ItemBag.DeletedItemInfos)
         {
             if (ii.Deleted)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableItemInfo;
                 msg.PrimaryKeys.AddRange(ii.PrimaryKeys);
                 msg.ForeignKeys.AddRange(ii.ForeignKeys);
                 msg.Data = null;
                 DispatchAction(SaveInternal, msg);
                 ii.Deleted = false;
             }
         }
         ui.ItemBag.DeletedItemInfos.Clear();
         foreach (var fi in ui.FriendInfos)
         {
             if (fi.Modified)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableFriendInfo;
                 msg.PrimaryKeys.AddRange(fi.PrimaryKeys);
                 msg.ForeignKeys.AddRange(fi.ForeignKeys);
                 msg.Data = DbDataSerializer.Encode(fi.ToProto());
                 DispatchAction(SaveInternal, msg);
                 fi.Modified = false;
             }
         }
         foreach (var fi in ui.DeletedFriendInfos)
         {
             if (fi.Deleted)
             {
                 Msg_LD_Save msg = new Msg_LD_Save();
                 msg.MsgId = (int)DataEnum.TableFriendInfo;
                 msg.PrimaryKeys.AddRange(fi.PrimaryKeys);
                 msg.ForeignKeys.AddRange(fi.ForeignKeys);
                 msg.Data = DbDataSerializer.Encode(fi.ToProto());
                 DispatchAction(SaveInternal, msg);
                 fi.Deleted = false;
             }
         }
         ui.DeletedFriendInfos.Clear();
         ui.CurrentUserSaveCount = saveCount;
     } catch (Exception e) {
         LogSys.Log(LOG_TYPE.ERROR, "DataCache Save ERROR. Msg:SaveUser, Key:{0}, SaveCount:{1}, Error:{2},\nStacktrace:{3}", ui.Guid, saveCount, e.Message, e.StackTrace);
     }
 }