Ejemplo n.º 1
0
        private void OnSaveReply(Msg_DL_SaveResult msg, PBChannel channel, int src, uint session)
        {
            KeyString key = KeyString.Wrap(msg.PrimaryKeys);
            ConcurrentDictionary <KeyString, ConcurrentQueue <SaveRequestInfo> > dict;

            if (m_SaveRequestQueues.TryGetValue(msg.MsgId, out dict))
            {
                ConcurrentQueue <SaveRequestInfo> reqQueue;
                if (dict.TryGetValue(key, out reqQueue))
                {
                    SaveRequestInfo info;
                    if (reqQueue.TryPeek(out info))
                    {
                        if (info.m_Request.SerialNo == msg.SerialNo)
                        {
                            if (null != info.m_Callback)
                            {
                                info.m_Callback(msg);
                            }
                            SaveRequestInfo delInfo;
                            if (reqQueue.TryDequeue(out delInfo))
                            {
                                m_SaveRequestPool.Recycle(delInfo);
                            }
                            //发送队列中的下一个消息
                            if (reqQueue.TryPeek(out info))
                            {
                                info.m_LastSendTime = TimeUtility.GetLocalMilliseconds();
                                m_DataStoreChannel.Send(info.m_Request);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
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);
    }