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