public void receivePackage(byte[] package) { Guid g = UdpFrame.getGuid(package); lock (framesLock) { if (!frames.ContainsKey(g)) { frames[g] = new UdpFrame(); } frames[g].addPackage(package); } }
public UdpFrame getFrame() { UdpFrame ret = null; lock (framesLock) { ret = frames.Values.Where(t => t.complete && !t.dirty).OrderBy(t => t.receiveTime).LastOrDefault(); if (ret != null) { foreach (var item in frames.Where(t => t.Value.receiveTime < ret.receiveTime)) { item.Value.dirty = true; } var now = DateTime.Now; var keys = frames.Where(t => t.Value == ret || (now - t.Value.receiveTime).TotalSeconds > 5).Select(t => t.Key).ToList(); foreach (var item in keys) { frames.Remove(item); } } } return(ret); }