private static final class Osi7LongTelegramRecombine.Receiver
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private int |
_currentByteArrayPosition
Bestimmt, an welcher Stelle das empfangende Byte-Array eingefügt werden soll
|
private boolean |
_firstTelegramReceived |
private Osi7LongTelegramRecombine.ReceiverKey |
_keyForThisReceiver
Unter diesem Schlüssel ist das Objekt in einer Map gespeichert
|
private int |
_numberOfNeededPieces
Speichert wieviele Stücke insgesamt zu einem Lang-Telegramm gehören (dieser Wert wird nur bei Big und Bigger Paketen benutzt)
|
private int |
_numberOfPiecesReceived
Speichert wieviele Pakete bisher empfangen wurden (daraus ergibt sich auch die Nummer des nächsten Stücks, das erwartet wird)
|
private Osi7LongTelegramRecombine |
_receiverManager
Dieses Objekt stellt eine Methode zur Verfügung, mit dem sich dieses Objekt aus einer Map entfernen kann.
|
private byte[] |
_telegram
In diesem Byte-Array wird das Langtelegramm zusammengebaut.
|
private boolean |
_telegramFinished
Diese Variable wird true, sobald ein Telegramm fertiggestellt ist.
|
private LongTelegramType |
_typeOfData
Speichert die Art des Pakets, alle folgenden Telegramme müssen von der gleichen Art sein.
|
Constructor and Description |
---|
Receiver(Osi7LongTelegramRecombine.ReceiverKey keyForThisReceiver,
Osi7LongTelegramRecombine receiverManager) |
Modifier and Type | Method and Description |
---|---|
private void |
analyzeFirstTelegram(byte[] firstTelegram)
Diese Methode prüft ein Paket, ob es ein gültiges Startpaket ist (ShortBlock, StartBigBlock, StartBiggerBlock).
|
private void |
cancelReceiver()
Diese Methode wird aufgerufen, wenn ein Receiverobjekt sich aus der Liste der Empfänger austragen lassen möchte.
|
byte[] |
getLongTelegram()
Gibt das fertige Telegramm zurück und entfernt den Empfänger aus der Liste von Empfängern.
|
private void |
handleSecondStartTelegram()
Diese Methode wird aufgerufen, wenn ein Teiltelegramm empfangen wurde, das ein neues Startpaket ist.
|
private boolean |
isFirstTelegram(byte[] firstTelegram)
Diese Methode prüft, ob ein Telegramm als gültiges Starttelegramm erkannt werden könnte.
|
boolean |
isTelegramFinished() |
void |
newData(byte[] receivedData) |
private void |
telegramCompleted()
Diese Methode wird aufgerufen, wenn ein Telegramm komplett empfangen wurde.
|
java.lang.String |
toString() |
private final Osi7LongTelegramRecombine.ReceiverKey _keyForThisReceiver
Unter diesem Schlüssel ist das Objekt in einer Map gespeichert
private final Osi7LongTelegramRecombine _receiverManager
Dieses Objekt stellt eine Methode zur Verfügung, mit dem sich dieses Objekt aus einer Map entfernen kann. Dies wird nötig, wenn alle Daten empfangen wurden, oder ein Fehler aufgetreten ist.
private byte[] _telegram
In diesem Byte-Array wird das Langtelegramm zusammengebaut. Am Anfang ist die Länge unbekannt, nach dem das erste Paket empfangen wurde, wird die Länge gesetzt.
private LongTelegramType _typeOfData
Speichert die Art des Pakets, alle folgenden Telegramme müssen von der gleichen Art sein. (Ist das erste Paket ein StartBigBlock, dann muss der Rest von Typ NextBigPiece oder EndBigBlock sein. Der Typ der Daten ist BIG.)
private int _numberOfNeededPieces
Speichert wieviele Stücke insgesamt zu einem Lang-Telegramm gehören (dieser Wert wird nur bei Big und Bigger Paketen benutzt)
private int _numberOfPiecesReceived
Speichert wieviele Pakete bisher empfangen wurden (daraus ergibt sich auch die Nummer des nächsten Stücks, das erwartet wird)
private int _currentByteArrayPosition
Bestimmt, an welcher Stelle das empfangende Byte-Array eingefügt werden soll
private boolean _firstTelegramReceived
private boolean _telegramFinished
Diese Variable wird true, sobald ein Telegramm fertiggestellt ist.
public Receiver(Osi7LongTelegramRecombine.ReceiverKey keyForThisReceiver, Osi7LongTelegramRecombine receiverManager)
public void newData(byte[] receivedData)
private void telegramCompleted()
Diese Methode wird aufgerufen, wenn ein Telegramm komplett empfangen wurde.
public boolean isTelegramFinished()
public byte[] getLongTelegram() throws java.lang.IllegalStateException
Gibt das fertige Telegramm zurück und entfernt den Empfänger aus der Liste von Empfängern.
java.lang.IllegalStateException
- Das Langtelegramm wurde noch nicht fertiggestelltpublic java.lang.String toString()
toString
in class java.lang.Object
private void cancelReceiver()
Diese Methode wird aufgerufen, wenn ein Receiverobjekt sich aus der Liste der Empfänger austragen lassen möchte. Ein Grund wäre, das Telegramm wurde komplett empfangen oder ein Fehler ist aufgetreten.
private void handleSecondStartTelegram()
Diese Methode wird aufgerufen, wenn ein Teiltelegramm empfangen wurde, das ein neues Startpaket ist. Es könnte sich bei diesem Paket um ein ShortBlock, StartBig/Bigger handeln. Ist das der Fall, müssen die alten Daten verworfen werden. Aber das gerade empfangene Telegramm kann als Start für die folgenden Telegramme benutzt werden. Ein Beispiel wäre, der Sender kann nicht mehr senden, nach Tagen verschickt er wieder Telegramme.
Die alten Daten werden verworfen.
private boolean isFirstTelegram(byte[] firstTelegram)
Diese Methode prüft, ob ein Telegramm als gültiges Starttelegramm erkannt werden könnte. Gültig bedeutet, dass das Telegramm ein ShortBlock, StartBig, StartBiggerBlock ist.
firstTelegram
- Telegramm, das geprüft werden soll.private void analyzeFirstTelegram(byte[] firstTelegram) throws java.lang.IllegalStateException
Diese Methode prüft ein Paket, ob es ein gültiges Startpaket ist (ShortBlock, StartBigBlock, StartBiggerBlock). Falls es kein gültiges Startpaket ist, wird ein IllegalStateException geworfen. Dies führt dazu, dass der Empfämger sich aus der Map löscht und keine weiteren Pakete empfangen kann. Folgepakete des ersten Fehlerhaften Pakets werden ebenfalls hier geprüft und verworfen.
firstTelegram
- Telegramm, das geprüft werden solljava.lang.IllegalStateException
- Das übergebene Telegramm ist kein gültiges erstes Paket (ShortBlock, StartBigBlock, StartBiggerBlock)