void DispatchOffer(IpOffer offer) { switch (offer.Type) { case InformationPacket.PacketType.Data: if (Receive != null) { Receive(offer); } break; case InformationPacket.PacketType.StartSequence: if (SequenceStart != null) { SequenceStart(offer); } break; case InformationPacket.PacketType.EndSequence: if (SequenceEnd != null) { SequenceEnd(offer); } break; case InformationPacket.PacketType.Auto: if (Receive != null) { Receive(offer); } break; } }
public bool Tick() { if (Closed) { return(false); } var packetWasSent = false; do { if (ipOffer != null) { DispatchOffer(ipOffer); } else if (!initialIpSent && initialIp != null) { ipOffer = new IpOffer(initialIp); DispatchOffer(ipOffer); } else if (queue.Count > 0) { ipOffer = new IpOffer(queue.Peek()); DispatchOffer(ipOffer); } if (ipOffer != null && ipOffer.Accepted) { if (!initialIpSent && initialIp != null) { initialIpSent = true; } else { lock (lockObject) { queue.Dequeue(); } } ipOffer = null; packetWasSent = true; } }while (Greedy && queue.Count > 0 && ipOffer == null); return(packetWasSent); }
void Enqueue(IpOffer offer) { var ip = offer.Accept(); queue.Enqueue(ip); }