public RdpeudpPacket ExpectACKPacket(TimeSpan timeout)
{
DateTime endtime = DateTime.Now + timeout;
while (DateTime.Now < endtime)
{
lock (unProcessedPacketBuffer)
{
for (int i = 0; i < unProcessedPacketBuffer.Count; i++)
{
RdpeudpPacket eudpPacket = unProcessedPacketBuffer[i];
if (eudpPacket.fecHeader.uFlags.HasFlag(RDPUDP_FLAG.RDPUDP_FLAG_ACK))
{
if (!Connected || (eudpPacket.ackVectorHeader.HasValue && eudpPacket.ackVectorHeader.Value.uAckVectorSize > 0))
{
unProcessedPacketBuffer.RemoveAt(i);
return eudpPacket;
}
}
}
}
}
return null;
}