internal void EnqueueSend(PacketType type, Packet packet) { // NOTE: packet may be null in the case of Falcon system messages. if (packet != null && packet.BytesWritten > FalconPeer.MaxPayloadSize) { throw new InvalidOperationException(String.Format("Packet size: {0}, greater than max: {1}", packet.BytesWritten, FalconPeer.MaxPayloadSize)); } bool isFalconHeaderWritten = currentDatagramTotalBufferOffset > currentDatagram.Offset; if (isFalconHeaderWritten) { if (packet != null && (packet.BytesWritten + Const.ADDITIONAL_PACKET_HEADER_SIZE) > (currentDatagram.Count - (currentDatagramTotalBufferOffset - currentDatagram.Offset))) // i.e. cannot fit { // enqueue the current args and get a new one EnqueueCurrentDatagram(); isFalconHeaderWritten = false; } } if (!isFalconHeaderWritten) { // write the falcon header FalconHelper.WriteFalconHeader(currentDatagram.BackingBuffer, currentDatagram.Offset, type, channelType, seqCount, packet == null ? (ushort)0 : (ushort)packet.BytesWritten); currentDatagramTotalBufferOffset += Const.FALCON_PACKET_HEADER_SIZE; } else { // TODO limit max additional to 100 so receive channel can distinguish ordinal seq // write additional header FalconHelper.WriteAdditionalFalconHeader(currentDatagram.BackingBuffer, currentDatagramTotalBufferOffset, type, channelType, packet == null ? (ushort)0 : (ushort)packet.BytesWritten); currentDatagramTotalBufferOffset += Const.ADDITIONAL_PACKET_HEADER_SIZE; } if (packet != null) { //--------------------------------------------------------------------------------------------------- packet.CopyBytes(0, currentDatagram.BackingBuffer, currentDatagramTotalBufferOffset, packet.BytesWritten); //--------------------------------------------------------------------------------------------------- currentDatagramTotalBufferOffset += packet.BytesWritten; } }