Example #1
0
        private void DoSaveReply(NLRep_Save msg, PBChannel channel, int src, uint session)
        {
            string       timeoutKey = string.Format("{0}:{1}", msg.DsMsgId, msg.Key);
            SaveCallback cb         = saveOpt_timeout_.Get(timeoutKey);

            if (null != cb)
            {
                DSSaveResult saveRet  = DSSaveResult.UnknownError;
                string       errorStr = "Save Unknown Error";
                if (msg.Result == NLRep_Save.Types.SaveResult.Success)
                {
                    saveRet  = DSSaveResult.Success;
                    errorStr = "Save Success";
                }
                else if (msg.Result == NLRep_Save.Types.SaveResult.Error)
                {
                    saveRet = DSSaveResult.PostError;
                    if (msg.HasError)
                    {
                        errorStr = msg.Error.ToString();
                    }
                    else
                    {
                        errorStr = "Save Post Error";
                    }
                }
                cb(saveRet, errorStr);
                saveOpt_timeout_.Remove(timeoutKey);
            }
        }
Example #2
0
 private void OnSaveReply(NLRep_Save msg, PBChannel channel, int src, uint session)
 {
     if (null != m_RunningThread)
     {
         m_RunningThread.QueueAction(this.DoSaveReply, msg, channel, src, session);
     }
 }
Example #3
0
    private void SaveHandler(LNReq_Save msg, PBChannel channel, int handle, uint seq)
    {
        if (!Enable)
        {
            LogSys.Log(LOG_TYPE.ERROR, "Save a message while DataOperator is Disable");
            return;
        }
        var reply = NLRep_Save.CreateBuilder();

        reply.SetDsMsgId(msg.DsMsgId);
        reply.SetKey(msg.Key);
        reply.Result = NLRep_Save.Types.SaveResult.Success;
        try
        {
            byte[] data_bytes    = ByteString.Unsafe.GetBuffer(msg.DsBytes);
            int    calc_checksum = Crc32.Compute(data_bytes);
            if (msg.Checksum != calc_checksum)
            {
                throw new DataChecksumError(msg.Checksum, calc_checksum);
            }
            string dataTypeName = string.Empty;
            if (m_DSDMessages.TryGetValue(msg.DsMsgId, out dataTypeName))
            {
                DataCacheSystem.Instance.QueueAction(DataCacheSystem.Instance.DirectSave, msg.DsMsgId, msg.Key, data_bytes);
            }
            else
            {
                dataTypeName = MessageMapping.Query(msg.DsMsgId).Name;
                if (dataTypeName.StartsWith("DSD_"))
                {
                    //直接写入数据库
                    m_DSDMessages.AddOrUpdate(msg.DsMsgId, dataTypeName, (key, oldValue) => dataTypeName);
                    DataCacheSystem.Instance.QueueAction(DataCacheSystem.Instance.DirectSave, msg.DsMsgId, msg.Key, data_bytes);
                }
                else
                {
                    //写入数据缓存
                    DataCacheSystem.Instance.SaveActionQueue.QueueAction(DataCacheSystem.Instance.Save, msg.DsMsgId, msg.Key, data_bytes);
                }
            }
        }
        catch (Exception e)
        {
            reply.Result = NLRep_Save.Types.SaveResult.Error;
            reply.SetError(e.Message);
            LogSys.Log(LOG_TYPE.ERROR, "Save data ERROR: msgId:({0}) seq:({1}) error:({2}) detail:{3}", msg.DsMsgId, seq, e.Message, e.StackTrace);
        }
        channel.Send(reply.Build());
    }