示例#1
0
        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");
        }
示例#2
0
        /// <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);
                }
            }
        }