private void splitterThreadWork() { logger.Info("Iniciando thread de splitter processor"); long lastLog = 0; while (_bKeepRunning) { try { QuickFix.FIX44.Message message = null; if (queueToSplit.TryDequeue(out message)) { logger.Debug("Splitting Message [" + message.Header.GetInt(34) + "] type [" + message.Header.GetString(35) + "]"); List <QuickFix.FIX44.Message> lstSplitted = FIXUtils.splitMessage(message, 0, null); foreach (QuickFix.FIX44.Message splittedmsg in lstSplitted) { enqueueToProcess(splittedmsg); } if (MDSUtils.shouldLog(lastLog)) { logger.Info("Mensagens para splitting FIX na fila: " + queueToSplit.Count); lastLog = DateTime.UtcNow.Ticks; } continue; } Thread.Sleep(25); } catch (Exception ex) { logger.Error("splitterProc: " + ex.Message, ex); } } logger.Info("Thread de splitter finalizada"); }
/// <summary> /// /// </summary> private void messageSplitterProc(object param) { int me = (int)param; logger.InfoFormat("Iniciando thread {0} de splitting", me); long lastLog = 0; while (_bKeepRunning) { try { if (currentFeed < 0) { Thread.Sleep(250); continue; } QuickFix.FIX44.Message message = null; if (inboundQueues[me].TryDequeue(out message)) { int msgSeqNum = message.Header.GetInt(QuickFix.Fields.Tags.MsgSeqNum); string msgType = message.Header.GetString(QuickFix.Fields.Tags.MsgType); int lastDigit = msgSeqNum % 10; if (lastDigit != Convert.ToInt32(msgSeqNum.ToString().AsEnumerable().Last().ToString())) { logger.Error("PQP arrendondamento FDP"); } if (!msgType.Equals(QuickFix.FIX44.TestRequest.MsgType)) { logger.Debug("Splitting Message [" + message.Header.GetInt(QuickFix.Fields.Tags.MsgSeqNum) + "] type [" + message.Header.GetString(QuickFix.Fields.Tags.MsgType) + "]"); List <QuickFix.FIX44.Message> lstSplitted = FIXUtils.splitMessage(message, 0, null); foreach (QuickFix.FIX44.Message splittedmsg in lstSplitted) { enqueueToFire(me, splittedmsg); } } else { logger.DebugFormat("inboundQueue[{0}] recebeu TestRequest, skipping", me); } // Envia o marcador de final da mensagem QuickFix.FIX44.TestRequest mark = new QuickFix.FIX44.TestRequest(); mark.Header.SetField(new QuickFix.Fields.MsgSeqNum(msgSeqNum)); enqueueToFire(me, mark); if (MDSUtils.shouldLog(lastLog)) { logger.InfoFormat("Mensagens para splitting FIX na fila {0}: {1}", me, inboundQueues[me].Count); lastLog = DateTime.UtcNow.Ticks; } continue; } Thread.Sleep(25); } catch (Exception ex) { logger.Error("messageSplitterProc: " + ex.Message, ex); } } }