예제 #1
0
        /// <param name="entry">the record associated with the msg to retransmit. It
        /// contains the list of receivers that haven't yet ack reception
        /// </param>
        internal void  _retransmit(Entry entry)
        {
            Address sender;
            bool    received;

            lock (entry)
            {
                for (System.Collections.IEnumerator e = entry.senders.Keys.GetEnumerator(); e.MoveNext();)
                {
                    sender   = (Address)e.Current;
                    received = ((System.Boolean)entry.senders[sender]);
                    if (!received)
                    {
                        if (suspects.Contains(sender))
                        {
                            NCacheLog.Warn("AckMcastSenderWindow", "removing " + sender + " from retransmit list as it is in the suspect list");

                            remove(sender);
                            continue;
                        }

                        NCacheLog.Warn("AckMcastSenderWindow", "--> retransmitting msg #" + entry.seqno + " to " + sender);

                        cmd.retransmit(entry.seqno, entry.msg.copy(), sender);
                    }
                }
            }
        }
예제 #2
0
            /// <summary>
            /// For each interval, call the retransmission callback command
            /// </summary>
            public override void run()
            {
                long[] bounds;

                lock (this)
                {
                    for (int i = 0; i < list.Count; ++i)
                    {
                        bounds = (long[])list[i];
                        retCmd.retransmit(bounds[0], bounds[1], initialSender);
                    }
                }
            }
예제 #3
0
        /* -------------------------------- Retransmitter.RetransmitCommand interface ------------------- */
        public virtual void  retransmit(long first_seqno, long last_seqno, Address sender)
        {
            Message msg;

            if (retransmit_command != null)
            {
                for (long i = first_seqno; i <= last_seqno; i++)
                {
                    if ((msg = (Message)msgs[(long)i]) != null)
                    {
                        // find the message to retransmit
                        retransmit_command.retransmit(i, msg);
                    }
                }
            }
        }