public void AddPacket(byte[] packetData, int length) { int lengthOfPacket = length; if (currPacketGroup.data == null) { currPacketGroup.data = new byte[MTU_SIZE]; } if (currPacketGroup.size + lengthOfPacket + 1 >= MTU_SIZE) { packetGroups.Add(currPacketGroup); currPacketGroup = new PacketGroupData(); currPacketGroup.data = new byte[MTU_SIZE]; } unsafe { fixed(byte *destPointer = currPacketGroup.data) { fixed(byte *srcPointer = packetData) { *(destPointer + currPacketGroup.size) = (byte)length; Memory.MemoryCopy((void *)(destPointer + currPacketGroup.size + 1), (void *)srcPointer, lengthOfPacket); currPacketGroup.size += lengthOfPacket + 1; } } } numPackets++; }
public void Clear() { packetGroups.Clear(); currPacketGroup = new PacketGroupData(); numPackets = 0; }