in FixAntenna/NetCore/FixEngine/Session/Impl/LeaveIdsSerializationStrategy.cs [60:186]
public override void Serialize(FixMessage content, ByteBuffer buffer, SerializationContext context, FixSessionRuntimeState runtimeState)
{
content.MarkUnserializableTag(Tags.BeginString);
content.MarkUnserializableTag(Tags.BodyLength);
content.MarkUnserializableTag(Tags.MsgType);
content.MarkUnserializableTag(Tags.MsgSeqNum);
content.MarkUnserializableTag(Tags.SendingTime);
content.MarkUnserializableTag(Tags.ApplVerID);
content.MarkUnserializableTag(Tags.CstmApplVerID);
content.MarkUnserializableTag(Tags.CheckSum);
var length = content.RawLength;
var msgTypeIndex = content.GetTagIndex(Tags.MsgType);
var msgTypeValueLength = content.GetTagValueLengthAtIndex(msgTypeIndex);
length += MsgTypeTagValue.Length + msgTypeValueLength + 1;
var updateSender = SenderCompIdLength != 0 && !content.IsTagExists(Tags.SenderCompID);
if (updateSender)
{
length -= GetTagLength(content, Tags.SenderCompID, 3);
length += SenderCompIdLength;
length -= GetTagLength(content, Tags.SenderSubID, 3);
length += SenderSubIdLength;
length -= GetTagLength(content, Tags.SenderLocationID, 4);
length += SenderLocationIdLength;
}
var updateTarget = TargetCompIdLength != 0 && !content.IsTagExists(Tags.TargetCompID);
if (updateTarget)
{
length -= GetTagLength(content, Tags.TargetCompID, 3);
length += TargetCompIdLength;
length -= GetTagLength(content, Tags.TargetSubID, 3);
length += TargetSubIdLength;
length -= GetTagLength(content, Tags.TargetLocationID, 4);
length += TargetLocationIdLength;
}
var isLogon = RawFixUtil.IsLogon(content);
byte[] loginHeader = null;
if (isLogon)
{
loginHeader = GetLoginHeader(runtimeState);
length += loginHeader.Length;
}
// out seq num
var outgoingSequenceNumber = runtimeState.OutSeqNum;
length += FixTypes.GetSeqNumLength(outgoingSequenceNumber, MinSeqNumLength); // out sequence
length += SohLength + SeqNumTagValue.Length;
long incomingSequenceNumber = 0;
if (IncludeLastProcessed)
{
incomingSequenceNumber = runtimeState.InSeqNum - 1;
length += FixTypes.GetSeqNumLength(incomingSequenceNumber, MinSeqNumLength); // in sequence
length += SohLength + LastProcessedTagValue.Length;
}
length += SohLength + SendingTimeTagValue.Length + context.FormatLength; // sending time
var msgLength = length;
length += CheckSumFieldLength;
length += BeginStringBodyLengthHeader.Length;
length += FixTypes.FormatIntLength(msgLength) + SohLength; // 9 (MsgLength) value
if (!buffer.IsAvailable(length))
{
buffer.IncreaseBuffer(length);
}
// msg length
var offset = buffer.Offset;
buffer.Add(BeginStringBodyLengthHeader); // msg version + part of msg length
buffer.AddLikeString(msgLength);
buffer.Add(Soh);
// msg type
buffer.Add(MsgTypeTagValue); // 35=
content.GetTagValueAtIndex(msgTypeIndex, buffer);
// SeqNum
buffer.Add(Soh);
buffer.Add(SeqNumTagValue);
buffer.AddLikeString(outgoingSequenceNumber, MinSeqNumLength);
buffer.Add(Soh);
AddHeaderTag(content, buffer, Tags.SenderCompID, SenderCompId, updateSender);
AddHeaderTag(content, buffer, Tags.TargetCompID, TargetCompId, updateTarget);
AddHeaderTag(content, buffer, Tags.SenderSubID, SenderSubId, updateSender);
AddHeaderTag(content, buffer, Tags.TargetSubID, TargetSubId, updateTarget);
AddHeaderTag(content, buffer, Tags.SenderLocationID, SenderLocationId, updateSender);
AddHeaderTag(content, buffer, Tags.TargetLocationID, TargetLocationId, updateTarget);
// last processed SeqNum
if (IncludeLastProcessed)
{
buffer.Add(LastProcessedTagValue).AddLikeString(incomingSequenceNumber, MinSeqNumLength).Add(Soh);
}
// sending time
var sendingTime = context.CurrentDateValue;
buffer.Add(SendingTimeTagValue).Add(sendingTime).Add(Soh);
if (isLogon)
{
buffer.Add(loginHeader);
}
buffer.Offset = content.ToByteArrayAndReturnNextPosition(buffer.GetByteArray(), buffer.Offset, StandardMessageFactory.ExcludedFields);
// checksum
if (!buffer.IsAvailable(CheckSumFieldLength))
{
buffer.IncreaseBuffer(CheckSumFieldLength);
}
WriteChecksumField(buffer.GetByteArray(), offset, buffer.Offset - offset);
buffer.Offset = buffer.Offset + CheckSumFieldLength;
content.ClearUnserializableTags();
}