private static final class Osi7LongTelegramSegment.FragmentedLongTelegram
extends java.lang.Object
Zerlegt ein Langtelegramm in Teilstücke und stellt diese per Methodenaufruf zur Verfügung
Modifier and Type | Field and Description |
---|---|
private int |
_costEndBiggerBlock
Wie viele Bytes “kosten” die Steuerungsinformationen eines nextBiggerPiece
|
private int |
_costNextBiggerPiece
Wie viele Bytes “kosten” die Steuerungsinformationen eines nextBiggerPiece
|
private int |
_costStartBiggerBlock
Wie viele Bytes “kosten” die Steuerungsinformationen eines StartBiggerBlocks
|
private int |
_crcChecksum
Speichert die CRC-Prüfsumme TBD in dieser Version immer 0
|
private byte |
_dataBlockNumber
Jeder DatenBlock, der verschickt wird, bekommt die gleiche Nummer, aus dieser Nummer schließt der Empfänger zu welchem Langtelegramm das Teilstück gehört.
|
private int |
_dataBytesLeft
Speichert, wieviele Bytes noch verschickt werden müssen.
|
private int |
_dataPosition
Speichert den Index im Byte-Array, ab dem Daten verschickt werden dürfen.
|
private int |
_maxDataForBigTelegram
Speichert die maximale Anzahl von Bytes, die in einem LongTelegram vom Typ Big gesendet werden kann.
|
private int |
_maxDataForTelegram
Legt die maximale Größe eines Teil-Telegramms fest.
|
private int |
_numberOfNeededPieces
Wieviele Datenblockstücke müssen verschickt werden (Start und Ende zählen nicht)
|
private boolean |
_onePieceLeft
Gibt an, ob noch ein Teil-Telegramm vorhanden ist, das verschickt werden muss.
|
private int |
_priority
Priorität, mit der die Telegrammstücke verschickt werden sollen
|
private int |
_receiverNodeNumber
Die Empfängeradresse wird von einer anderen Klasse benötigt, um an den Empfänger zu kommen.
|
private int |
_senderNodeNumber
Adresse des Senders
|
private boolean |
_startBlockSend
Gibt an, ob der StartBig/StartBigger Block schon verschickt wurde
|
private int |
_telegramNumber
Nummer des Telegramms, das verschickt werden soll. 0 = StartBlock … _numberOfNeededPieces + 1 = EndBlock
|
private LongTelegramType |
_telegramType
Speichert den Long-Type, den das zu übertragenen Telegramm haben muss damit alle Daten übertragen werden können
|
private byte[] |
_wholeTelegram
Speichert das zu übertragene Telegramm
|
Constructor and Description |
---|
FragmentedLongTelegram(byte[] telegram,
int senderNodeNumber,
byte dataBlockNumber,
int receiverNodeNumber,
int priority) |
Modifier and Type | Method and Description |
---|---|
private void |
createSenderNodeNumber(byte[] byteArray)
Diese Methode trägt in dem übergebenen Byte-Array die Knotennummer des Senders ein
|
private int |
createTelegramFrame(byte[] byteArray)
Erzeugt einen Header und trägt den richtigen Typ (ShortBlock, StartBig,EndBig, usw ein) Danach können in das Array die Bytes des Datenblocks eingefügt werden, CRC wird ebenfalls eingetragen.
|
byte |
getDataBlockNumber() |
byte[] |
getNextPiece() |
int |
getPriority() |
int |
getReceiverNodeNumber() |
int |
getSenderNodeNumber() |
boolean |
isOnePieceLeft()
Diese Methode gibt true zurück, wenn noch ein Teil-Telegramm zur Verfügung steht.
|
private boolean |
sendEndBlock()
Diese Methode stellt fest, ob das zu verschickende Telegramm das EndBigBlock oder EndBiggerBlock sein muss.
|
private final byte[] _wholeTelegram
Speichert das zu übertragene Telegramm
private final int _senderNodeNumber
Adresse des Senders
private final int _receiverNodeNumber
Die Empfängeradresse wird von einer anderen Klasse benötigt, um an den Empfänger zu kommen. Der Wert dient als Key in einer Map.
private final LongTelegramType _telegramType
Speichert den Long-Type, den das zu übertragenen Telegramm haben muss damit alle Daten übertragen werden können
private int _dataPosition
Speichert den Index im Byte-Array, ab dem Daten verschickt werden dürfen. Diese “Marke” wandert über das Byte-Array, bis alle Daten verschickt wurden.
private int _dataBytesLeft
Speichert, wieviele Bytes noch verschickt werden müssen. Ist diese Zahl 0, wurden alle Byte verschickt.
private boolean _onePieceLeft
Gibt an, ob noch ein Teil-Telegramm vorhanden ist, das verschickt werden muss.
private boolean _startBlockSend
Gibt an, ob der StartBig/StartBigger Block schon verschickt wurde
private final int _maxDataForTelegram
Legt die maximale Größe eines Teil-Telegramms fest. Dieser Platz steht für Header, Nutzdaten, CRC zur Verfügung. So bleibt genügend Platz für das OSI 3 Routing.
private final int _maxDataForBigTelegram
Speichert die maximale Anzahl von Bytes, die in einem LongTelegram vom Typ Big gesendet werden kann. Anzahl NextBigPiece * Bytes pro BigPiece (253*231) + Bytes, die in einem StartBig verpackt werden können (229) + Bytes, die in einem EndBig verpackt werden können (230)
private final byte _dataBlockNumber
Jeder DatenBlock, der verschickt wird, bekommt die gleiche Nummer, aus dieser Nummer schließt der Empfänger zu welchem Langtelegramm das Teilstück gehört. (Die Zahl ist zwischen 1 und 15)
private final int _numberOfNeededPieces
Wieviele Datenblockstücke müssen verschickt werden (Start und Ende zählen nicht)
private int _telegramNumber
Nummer des Telegramms, das verschickt werden soll. 0 = StartBlock … _numberOfNeededPieces + 1 = EndBlock
private final int _crcChecksum
Speichert die CRC-Prüfsumme TBD in dieser Version immer 0
private final int _costStartBiggerBlock
Wie viele Bytes “kosten” die Steuerungsinformationen eines StartBiggerBlocks
private final int _costNextBiggerPiece
Wie viele Bytes “kosten” die Steuerungsinformationen eines nextBiggerPiece
private final int _costEndBiggerBlock
Wie viele Bytes “kosten” die Steuerungsinformationen eines nextBiggerPiece
private final int _priority
Priorität, mit der die Telegrammstücke verschickt werden sollen
public FragmentedLongTelegram(byte[] telegram, int senderNodeNumber, byte dataBlockNumber, int receiverNodeNumber, int priority)
public byte[] getNextPiece() throws java.lang.IllegalStateException
java.lang.IllegalStateException
public boolean isOnePieceLeft()
Diese Methode gibt true zurück, wenn noch ein Teil-Telegramm zur Verfügung steht. Steht kein Teil-Telegramm mehr zur Verfügung, dann wird false zurückgegeben.
private int createTelegramFrame(byte[] byteArray)
Erzeugt einen Header und trägt den richtigen Typ (ShortBlock, StartBig,EndBig, usw ein) Danach können in das Array die Bytes des Datenblocks eingefügt werden, CRC wird ebenfalls eingetragen.
byteArray
- s.o.private boolean sendEndBlock()
Diese Methode stellt fest, ob das zu verschickende Telegramm das EndBigBlock oder EndBiggerBlock sein muss.
private void createSenderNodeNumber(byte[] byteArray)
Diese Methode trägt in dem übergebenen Byte-Array die Knotennummer des Senders ein
byteArray
- s.o.public byte getDataBlockNumber()
public int getReceiverNodeNumber()
public int getSenderNodeNumber()
public int getPriority()