예제 #1
0
        public virtual void OnMessage(QuickFix.FIX44.ApplicationRawDataReporting message, SessionID session)
        {
            try
            {
                //logger.InfoFormat("RawDataLength[{0}] getLength[{1}]", message.RawDataLength, message.RawData.getLength());
                UmdfUtils.dumpFastData(UmdfUtils.ENCODING.GetBytes(message.RawData.getValue()), 0, Int32.Parse(message.RawDataLength.ToString()));

                string[] quebraApplReqID   = message.ApplReqID.ToString().Split("|".ToCharArray());
                string   applReqID         = quebraApplReqID[0];
                string   sessionIDResponse = quebraApplReqID[1];

                // Retorna o applReqID original
                message.Set(new QuickFix.Fields.ApplReqID(quebraApplReqID[0]));

                // Inverte origem e destino da mensagem, para devolver a resposta ao cliente Fix
                message.Header.SetField(new QuickFix.Fields.SenderCompID(_dctSessionsFixClients[sessionIDResponse].TargetCompID));
                message.Header.SetField(new QuickFix.Fields.SenderSubID(_dctSessionsFixClients[sessionIDResponse].TargetSubID));
                message.Header.SetField(new QuickFix.Fields.TargetCompID(_dctSessionsFixClients[sessionIDResponse].SenderCompID));
                message.Header.SetField(new QuickFix.Fields.TargetSubID(_dctSessionsFixClients[sessionIDResponse].SenderSubID));

                logger.InfoFormat("SessionID[{0}]: ApplicationRawDataReporting enviando para sessionIDResponse[{1}] msg[{2}]",
                                  session.ToString(), sessionIDResponse, message.ToString());
                bool bRet = Session.SendToTarget(message, _dctSessionsFixClients[sessionIDResponse]);
                if (!bRet)
                {
                    logger.ErrorFormat("SessionID[{0}]: Falha ApplicationRawDataReporting sessionIDResponse[{1}] msg[{2}]",
                                       session.ToString(), sessionIDResponse, message.ToString());
                }
            }
            catch (Exception ex)
            {
                logger.Error("onMessage(ApplicationRawDataReporting): " + ex.Message, ex);
            }
        }
예제 #2
0
 public virtual void OnMessage(QuickFix.FIX44.ApplicationRawDataReporting message, SessionID session)
 {
     try
     {
         logger.DebugFormat("ApplicationRawDataReporting ApplReqID[{0}] msg[{1}]", message.ApplReqID.ToString(), message.ToString());
     }
     catch (Exception ex)
     {
         logger.Error("onMessage(ApplicationRawDataReporting): " + ex.Message, ex);
     }
 }
예제 #3
0
        public virtual void OnMessage(QuickFix.FIX44.ApplicationRawDataReporting message, SessionID session)
        {
            try
            {
                string applReqID = message.GetString(QuickFix.Fields.Tags.ApplReqID);
                logger.Info("*** Recebeu pacote RAW ***");
                logger.Info("ApplReqID .......: " + applReqID);
                logger.Info("ApplRespID ......: " + message.GetString(QuickFix.Fields.Tags.ApplRespID));
                logger.Info("ApplID ..........: " + message.GetString(QuickFix.Fields.Tags.ApplID));
                logger.Info("ApplResendFlag ..: " + message.GetString(QuickFix.Fields.Tags.ApplResendFlag));
                logger.Info("RawDataLength ...: " + message.GetString(QuickFix.Fields.Tags.RawDataLength));
                logger.Info("TotNumReports ...: " + message.GetString(QuickFix.Fields.Tags.TotNumReports));

                byte[]   rawData         = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(message.RawData.getValue());
                string[] quebraApplReqID = applReqID.Split("-".ToCharArray());
                string   channelID       = quebraApplReqID[1];

                logger.Debug("rawData.Length: " + rawData.Length + " (ChannelID:" + channelID + ")");
                //dumpFastData(rawData, 0, message.RawDataLength.getValue());

                int numApplSeqNums = message.GetInt(QuickFix.Fields.Tags.NoApplSeqNums);
                for (int i = 1; i <= numApplSeqNums; i++)
                {
                    try
                    {
                        QuickFix.FIX44.ApplicationRawDataReporting.NoApplSeqNumsGroup groupApplSeqNum = new QuickFix.FIX44.ApplicationRawDataReporting.NoApplSeqNumsGroup();
                        message.GetGroup(i, groupApplSeqNum);

                        int applSeqNum    = groupApplSeqNum.GetInt(QuickFix.Fields.Tags.ApplSeqNum);
                        int rawDataOffSet = groupApplSeqNum.GetInt(QuickFix.Fields.Tags.RawDataOffset);
                        int rawDataLength = groupApplSeqNum.GetInt(QuickFix.Fields.Tags.RawDataLength);
                        int lastSeqNum    = groupApplSeqNum.GetInt(QuickFix.Fields.Tags.ApplLastSeqNum);

                        logger.Info("ApplSeqNum[" + i + "]......: " + applSeqNum);
                        logger.Info("ApplLastSeqNum[" + i + "]..: " + lastSeqNum);
                        logger.Info("RawDataOffSet[" + i + "]...: " + rawDataOffSet);
                        logger.Info("RawDataLength[" + i + "]...: " + rawDataLength);

                        //dumpFastData(rawData, rawDataOffSet, rawDataLength);

                        MemoryStream byteIn = new MemoryStream(rawData, rawDataOffSet, rawDataLength);
                        //FastDecoder decoder = new FastDecoder(context, byteIn);
                        //OpenFAST.Message mensagem = decoder.ReadMessage();

                        byte[] seqNum    = new byte[4];
                        byte[] chunk     = new byte[2];
                        byte[] msgLength = new byte[2];

                        seqNum[0] = (byte)((applSeqNum & 0xFF000000) >> 24);
                        seqNum[1] = (byte)((applSeqNum & 0x00FF0000) >> 16);
                        seqNum[2] = (byte)((applSeqNum & 0x0000FF00) >> 8);
                        seqNum[3] = (byte)(applSeqNum & 0x000000FF);

                        int numChunk = 1;
                        chunk[0] = (byte)((numChunk & 0x0000FF00) >> 8);
                        chunk[1] = (byte)(numChunk & 0x000000FF);

                        msgLength[0] = (byte)((rawDataLength & 0x0000FF00) >> 8);
                        msgLength[1] = (byte)(rawDataLength & 0x000000FF);

                        byte[] umdfPacketBuffer = new byte[10 + rawDataLength];
                        System.Array.Copy(seqNum, 0, umdfPacketBuffer, 0, 4);
                        System.Array.Copy(chunk, 0, umdfPacketBuffer, 4, 2);
                        System.Array.Copy(chunk, 0, umdfPacketBuffer, 6, 2);
                        System.Array.Copy(msgLength, 0, umdfPacketBuffer, 8, 2);
                        System.Array.Copy(rawData, rawDataOffSet, umdfPacketBuffer, 10, rawDataLength);

                        UdpPacket packet = new UdpPacket();
                        packet.byteData     = umdfPacketBuffer;
                        packet.pktLength    = rawDataLength + 10;
                        packet.pktTimestamp = DateTime.Now.Ticks;
                        packet.feeder       = UdpPacket.FEEDER_REPLAY;

                        dumpFastData(umdfPacketBuffer, 0, rawDataLength + 10);

                        lock (listaChannelQueues[channelID].qUdpPkt)
                        {
                            listaChannelQueues[channelID].qUdpPkt.Enqueue(packet);
                            Monitor.Pulse(listaChannelQueues[channelID].qUdpPkt);
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error("onMessage(ApplicationRawDataReporting): " + ex.Message, ex);
                    }

                    lock (listaChannelQueues[channelID].replayLockObject)
                    {
                        Monitor.Pulse(listaChannelQueues[channelID].replayLockObject);
                    }
                }
                logger.Info("*** Fim do pacote RAW ***");
            }
            catch (Exception ex)
            {
                logger.Error("onMessage(ApplicationRawDataReporting): " + ex.Message, ex);
            }
        }