in netmf/NetMFLite/Receiver.cs [117:165]
internal void OnTransfer(List transfer, ByteBuffer payload)
{
for (int i = transfer.Count; i < 11; i++)
{
transfer.Add(null);
}
bool more = transfer[5] != null && true.Equals(transfer[5]);
if (transfer[1] == null || (this.deliveryReceived && this.lastDeliveryId.Equals(transfer[1])))
{
AmqpBitConverter.WriteBytes(this.messageBuffer, payload.Buffer, payload.Offset, payload.Length);
}
else
{
lock (this)
{
Fx.AssertAndThrow(ErrorCode.InvalidCreditOnTransfer, this.credit > 0);
this.deliveryCount++;
if (this.credit < uint.MaxValue)
{
this.credit--;
}
}
this.lastDeliveryId = (uint)transfer[1];
this.deliveryReceived = true;
if (this.messageBuffer == null)
{
if (more)
{
this.messageBuffer = new ByteBuffer(payload.Length * 2, true);
AmqpBitConverter.WriteBytes(this.messageBuffer, payload.Buffer, payload.Offset, payload.Length);
}
else
{
this.messageBuffer = payload;
}
}
}
if (!more) // more
{
Message message = Message.Decode(this.messageBuffer);
this.messageBuffer = null;
message.deliveryId = this.lastDeliveryId;
message.settled = transfer[4] != null && true.Equals(transfer[4]);
this.onMessage(this, message);
}
}