## org.jgroups.stack
Class AckReceiverWindow

    java.lang.Object
      org.jgroups.stack.AckReceiverWindow

    public class AckReceiverWindow

extends java.lang.Object

Counterpart of AckSenderWindow. Simple FIFO buffer. Every message received is ACK'ed (even duplicates) and added to a hashmap keyed by seqno. The next seqno to be received is stored in `next_to_remove`. When a message with a seqno less than next_to_remove is received, it will be discarded. The `remove()` method removes and returns a message whose seqno is equal to next_to_remove, or null if not found.
Change May 28 2002 (bela): replaced TreeSet with HashMap. Keys do not need to be sorted, and adding a key to a sorted set incurs overhead.

Author:
  Bela Ban

Field Summary
`static Message` `TOMBSTONE`

Constructor Summary
`AckReceiverWindow(long initial_seqno)`
`AckReceiverWindow(long initial_seqno, int segment_capacity)`

Method Summary
`boolean` `add(long seqno, Message msg)` Adds a new message.
`byte` `add2(long seqno, Message msg)` Adds a message if not yet received
`java.util.concurrent.atomic.AtomicBoolean` `getProcessing()`
`java.lang.String` `printMessages()`
`Message` `remove()` Removes a message whose seqno is equal to `next_to_remove`, increments the latter.
`Tuple<java.util.List<Message>,java.lang.Long>` `removeMany(int max)` Removes as many messages as possible (in sequence, without gaps)
`java.util.List<Message>` `removeManyAsList(int max)`
`void` `reset()`
`int` `size()`
`java.lang.String` `toString()`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### TOMBSTONE

    public static final Message TOMBSTONE

Constructor Detail

### AckReceiverWindow

    public AckReceiverWindow(long initial_seqno)

### AckReceiverWindow

    public AckReceiverWindow(long initial_seqno,
                             int segment_capacity)

Method Detail

### getProcessing

    public java.util.concurrent.atomic.AtomicBoolean getProcessing()

### add

    public boolean add(long seqno,
                       Message msg)

  Adds a new message. Message cannot be null

  Returns:
    True if the message was added, false if not (e.g. duplicate, message was already present)

### add2

    public byte add2(long seqno,
                     Message msg)

  Adds a message if not yet received

  Parameters:
    `seqno` -
    `msg` -
  Returns:
    -1 if not added because seqno < next_to_remove, 0 if not added because already present, 1 if added successfully

### remove

    public Message remove()

  Removes a message whose seqno is equal to `next_to_remove`, increments the latter. Returns message that was removed, or null, if no message can be removed. Messages are thus removed in order.

### removeMany

    public Tuple<java.util.List<Message>,java.lang.Long> removeMany(int max)

  Removes as many messages as possible (in sequence, without gaps)

  Parameters:
    `max` - Max number of messages to be removed
  Returns:
    Tuple<List<Message>,Long>: a tuple of the message list and the highest seqno removed

### removeManyAsList

    public java.util.List<Message> removeManyAsList(int max)

### reset

    public void reset()

### size

    public int size()

### toString

    public java.lang.String toString()

  Overrides:
    `toString` in class `java.lang.Object`

### printMessages

    public java.lang.String printMessages()

Copyright © 1998-2009 Bela Ban / Red Hat. All Rights Reserved.