private void OnRecoveryStarted(object sender, RecoveryStartedEventArgs args) { mktIncrProc.DiscardPackets(args.LastMsgSeqNumProcessed); }
protected override void umdfMessageProcessor() { try { logger.Debug("Processando mensagens de recovery"); string recoveryTemplateID = channelConfig.MDRecoveryTemplateID.ToString(); listaRecoveryTemplateID = recoveryTemplateID.Split(",".ToCharArray()); long lastLogTicks = 0; while (bKeepRunning) { try { //Message message = this.filaMensagensUMDF.take(); Message message; if (!queueToProcessor.TryDequeue(out message)) { Thread.Sleep(50); continue; } // Notifica o fim do snapshot para inicio do tratamento do incremental if (listaRecoveryTemplateID.Any(message.Template.Id.Contains)) { List <Message> mensagens = UmdfUtils.splitMessage(message, channelConfig.MarketDepth, ConstantesUMDF.FAST_MSGTYPE_SNAPSHOT_SINGLE); foreach (Message newMessage in mensagens) { MDSUtils.EnqueueEventoUmdf(newMessage, this.channelConfig.MDRecoveryTemplateID, this.channelConfig.ChannelID, this.channelConfig.Segment, ConstantesUMDF.FAST_MSGTYPE_SNAPSHOT_SINGLE, channelConfig.MarketDepth, StreamTypeEnum.STREAM_TYPE_MARKET_RECOVERY); if (MDSUtils.shouldLog(lastLogTicks)) { lastLogTicks = DateTime.UtcNow.Ticks; string msgTruncado = (message.ToString().Length < 200 ? message.ToString() : message.ToString().Substring(0, 200)); monitorConfig.channels[channelConfig.ChannelID].dateTimeStartedStopped = "Snapshot - " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " - " + msgTruncado; monitorConfig.channels[channelConfig.ChannelID].AddDetails( "2) Snapshot", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), msgTruncado); } } if (message.IsDefined("MsgSeqNum") && message.IsDefined("TotNumReports")) { int seqNum = message.GetInt("MsgSeqNum"); //34 int totNumReports = message.GetInt("TotNumReports"); //911 if (seqNum == 1) { int LastMsgSeqNumProcessed = message.GetInt("LastMsgSeqNumProcessed"); bCanProcess = true; logger.Info("Inicio do processamento do snapshot: " + totNumReports + " msgs"); logger.Info("Notificando observers, LastMsgSeqNumProcessed:" + LastMsgSeqNumProcessed); RecoveryStartedEventArgs e = new RecoveryStartedEventArgs(); e.LastMsgSeqNumProcessed = message.GetInt("LastMsgSeqNumProcessed"); if (this.OnRecoveryStarted != null) { OnRecoveryStarted(this, e); } } if (seqNum == totNumReports && bCanProcess) { int LastMsgSeqNumProcessed = message.GetInt("LastMsgSeqNumProcessed"); logger.Info("Fim do processamento do snapshot: " + totNumReports + " msgs"); logger.Info("Notificando observers, LastMsgSeqNumProcessed:" + LastMsgSeqNumProcessed); RecoveryCompletedEventArgs e = new RecoveryCompletedEventArgs(); e.LastMsgSeqNumProcessed = message.GetInt("LastMsgSeqNumProcessed"); monitorConfig.channels[channelConfig.ChannelID].dateTimeStartedStopped = "Snapshot - " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + ": Snapshot completo!"; monitorConfig.channels[channelConfig.ChannelID].AddDetails( "2) Snapshot", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), "Snapshot completo! Ultimo SeqNum[" + e.LastMsgSeqNumProcessed + "]"); if (this.OnRecoveryCompleted != null) { OnRecoveryCompleted(this, e); } bKeepRunning = false; break; } } else { logger.Error("Template ID nao reconhecido [" + message.Template.Id + "]"); } } } catch (Exception ex) { logger.Error("umdfMessageProcessor: " + ex.Message, ex); bCanProcess = false; } } Stop(); logger.Debug("Fim"); } catch (Exception ex) { logger.Error("Damn: " + ex.Message, ex); monitorConfig.channels[channelConfig.ChannelID].RemoveDetails("2) Snapshot"); //bKeepRunning = false; } }