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 Methode take() 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 Methode close() 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

    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.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • TelegramQueue

      public TelegramQueue​(int capacity, int maximumPriority)
      Erzeugt eine neue Queue mit den angegebenen Eigenschaften.
      Parameters:
      capacity - Maximale Gesamtgröße der gepufferten Telegramme.
      maximumPriority - Maximale von Telegrammen verwendete Priorität.
  • Method Details

    • 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 Methode put(Telegram) sämtliche weitere zu speichernde Telegramme und die Methode take() liefert noch alle bisher gespeicherten Telegramme und danach null 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 Methode put(Telegram) sämtliche weitere zu speichernde Telegramme und die Methode take() liefert anschließend immer null zurück. Eventuell blockierte Threads werden geweckt.