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); } }
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); } }
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()); }