Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        void Enqueue(IpOffer offer)
        {
            var ip = offer.Accept();

            queue.Enqueue(ip);
        }