Class TelegramQueue<Telegram extends QueueableTelegram>
- java.lang.Object
-
- de.bsvrz.dav.daf.communication.lowLevel.TelegramQueue<Telegram>
-
public class TelegramQueue<Telegram extends QueueableTelegram> extends java.lang.Object
Klasse, die zum gepufferten Austausch von Telegrammen zwischen verschiedenen Threads verwendet werden kann. Die Gesamtgröße der gepufferten Telegramme ist beschränkt. Es werden verschiedene Telegrammprioritäten unterstützt.Telegramme können mit der Methode
put(Telegram)
gespeichert werden und mit der Methodetake()
wieder ausgelesen werden. Die Methoden blockieren, wenn beim Speichern nicht genügend Platz vorhanden ist, bzw., wenn beim Auslesen kein Telegramm mehr zur Verfügung steht. Der Methodeclose()
dient zum Schließen der Queue. blockiert keine der beiden Methoden mehr.
-
-
Constructor Summary
Constructors Constructor Description TelegramQueue(int capacity, int maximumPriority)
Erzeugt eine neue Queue mit den angegebenen Eigenschaften.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abort()
Diese Methode schließt die Verbindung und löscht alle noch gespeicherten Telegramme.void
close()
Diese Methode schließt die Verbindung.int
getCapacity()
Bestimmt die maximale Gesamtgröße für zwischengespeicherte Telegramme.int
getSize()
Bestimmt die Gesamtgröße der aktuell zwischengespeicherten Telegramme.void
put(Telegram telegram)
Speichert das angegebene Telegramm in der Queue.Telegram
take()
Gibt das älteste in der Queue gespeicherte Telegramm mit der höchsten Priorität zurück.int
takeMultiple(int sizeLimit, java.util.Collection<Telegram> result)
Gibt die ältesten in der Queue gespeicherten Telegramme zurück, so lange bis die summierte Telegrammlänge das angegebene Limit überschreitet oder die Queue leer ist.
-
-
-
Method Detail
-
take
public Telegram take() throws java.lang.InterruptedException
Gibt das älteste in der Queue gespeicherte Telegramm mit der höchsten Priorität zurück. Wenn die Queue noch nicht geschlossen wurde, wartet diese Methode, bis ein Telegramm in der Queue zur Verfügung steht.- Returns:
- Nächstes gespeicherte Telegramm mit der höchsten Priorität. Wenn die Queue geschlossen wurde und kein gespeichertes Telegramm mehr
verfügbar ist wird
null
zurückgegeben. - Throws:
java.lang.InterruptedException
- Wenn der Thread während des Wartens unterbrochen wurde.
-
takeMultiple
public int takeMultiple(int sizeLimit, java.util.Collection<Telegram> result) throws java.lang.InterruptedException
Gibt die ältesten in der Queue gespeicherten Telegramme zurück, so lange bis die summierte Telegrammlänge das angegebene Limit überschreitet oder die Queue leer ist. Das erste Telegramm, was dafür sorgt, dass das Limit überschritten wird, wird mit zurückgegeben. Das bedeutet, dass auch bei einem Limit von 0 immer (genau) ein Telegramm zurückgegeben wird.- Parameters:
sizeLimit
- Anzahl Bytes, die diese Methode versucht mindestens zurückzugeben (solange in der Queue genug Daten da sind)result
- Liste in der die Telegramme zurückgegeben werden. Wird übergeben, damit nicht ständig eine neue Liste erstellt werden muss. Die Liste wird beim Aufruf der Methode geleert.- Returns:
- Anzahl Bytes der zurückgegebenen Telegramme oder -1 wenn die Queue geschlossen wurde
- Throws:
java.lang.InterruptedException
-
put
public void put(Telegram telegram) throws java.lang.InterruptedException
Speichert das angegebene Telegramm in der Queue. Bei Bedarf wartet diese Methode bis genügend Platz in der Queue für das zu speichernde Telegramm zur Verfügung steht.- Parameters:
telegram
- Das zu speichernde Telegramm- Throws:
java.lang.InterruptedException
- Wenn der Thread während des Wartens unterbrochen wurde.
-
getCapacity
public int getCapacity()
Bestimmt die maximale Gesamtgröße für zwischengespeicherte Telegramme.- Returns:
- Maximale Gesamtgröße für zwischengespeicherte Telegramme.
-
getSize
public int getSize()
Bestimmt die Gesamtgröße der aktuell zwischengespeicherten Telegramme.- Returns:
- Gesamtgröße der aktuell zwischengespeicherten Telegramme.
-
close
public void close()
Diese Methode schließt die Verbindung. Danach ignoriert die Methodeput(Telegram)
sämtliche weitere zu speichernde Telegramme und die Methodetake()
liefert noch alle bisher gespeicherten Telegramme und danachnull
zurück. Eventuell blockierte Threads werden geweckt.
-
abort
public void abort()
Diese Methode schließt die Verbindung und löscht alle noch gespeicherten Telegramme. Danach ignoriert die Methodeput(Telegram)
sämtliche weitere zu speichernde Telegramme und die Methodetake()
liefert anschließend immernull
zurück. Eventuell blockierte Threads werden geweckt.
-
-