private void SerializeWithAddedHeaderAndTrailerWithoutMessageTypeField()

in FixAntenna/NetCore/FixEngine/Session/Impl/StandardMessageFactory.cs [324:394]


		private void SerializeWithAddedHeaderAndTrailerWithoutMessageTypeField(FixMessage fixMessage, ByteBuffer buffer, SerializationContext context)
		{
			var length = _senderTargetHeader.Length;
			byte[] loginHeader = null;
			var msgType = fixMessage.MsgType;
			var isLogon = RawFixUtil.IsLogon(msgType);
			if (isLogon)
			{
				if (_logonCustomizationStrategy != null)
				{
					Log.Warn("logonCustomizationStrategy has been set but changesType provided does not support it (only update is supported).");
				}
				loginHeader = GetLoginHeader();
				length += loginHeader.Length;
			}
			length += fixMessage.RawLength;
			var outSeqNum = RuntimeState.OutSeqNum;
			var outSeqNumLen = FixTypes.GetSeqNumLength(outSeqNum, MinSeqNumFieldsLength);
			length += SeqNumTagValue.Length + SohLength + outSeqNumLen; // out sequence

			var inSeqNum = RuntimeState.InSeqNum - 1;
			if (IncludeLastProcessed)
			{
				//FIXME_NOW: add method for this value
				var inSeqNumLen = FixTypes.GetSeqNumLength(inSeqNum, MinSeqNumFieldsLength);
				length += LastProcessedTagValue.Length + SohLength + inSeqNumLen; // in sequence
			}

			length += SohLength + SendingTimeTagValue.Length + context.FormatLength; // sending time
			var msgLength = length;
			length += CheckSumFieldLength + FixTypes.FormatIntLength(msgLength) + SeparatorLength + _beginStringBodyLengthHeader.Length;

			if (!buffer.IsAvailable(length))
			{
				buffer.IncreaseBuffer(length);
			}
			var offset = buffer.Offset;
			buffer.Add(_beginStringBodyLengthHeader); // msg version + part of msg length
			buffer.AddLikeString((long) msgLength);
			buffer.Add(SeparatorByte);
			buffer.Add(MsgTypeTagValue); // 35=
			buffer.Add(msgType); // msg type
			buffer.Add(SeparatorByte);
			buffer.Add(SeqNumTagValue);
			buffer.AddLikeString(outSeqNum, MinSeqNumFieldsLength);
			buffer.Add(SeparatorByte);
			buffer.Add(_senderTargetHeader);
			if (IncludeLastProcessed)
			{
				buffer.Add(LastProcessedTagValue);
				buffer.AddLikeString(inSeqNum, MinSeqNumFieldsLength);
				buffer.Add(SeparatorByte);
			}
			var sendingTime = context.CurrentDateValue;
			buffer.Add(SendingTimeTagValue);
			buffer.Add(sendingTime);
			buffer.Add(SeparatorByte);

			if (isLogon)
			{
				buffer.Add(loginHeader);
			}

			buffer.Offset = fixMessage.ToByteArrayAndReturnNextPosition(buffer.GetByteArray(), buffer.Offset, ExcludedFields);
			if (!buffer.IsAvailable(CheckSumFieldLength))
			{
				buffer.IncreaseBuffer(CheckSumFieldLength);
			}
			WriteChecksumField(buffer.GetByteArray(), offset, buffer.Offset - offset);
			buffer.Offset = buffer.Offset + CheckSumFieldLength;
		}