de.bsvrz.kex.tls.osi2osi3.longtelegram
Class Osi7LongTelegramRecombine.Receiver

java.lang.Object
  extended by de.bsvrz.kex.tls.osi2osi3.longtelegram.Osi7LongTelegramRecombine.Receiver
Enclosing class:
Osi7LongTelegramRecombine

private static final class Osi7LongTelegramRecombine.Receiver
extends Object


Field Summary
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 Summary
Osi7LongTelegramRecombine.Receiver(Osi7LongTelegramRecombine.ReceiverKey keyForThisReceiver, Osi7LongTelegramRecombine receiverManager)
           
 
Method Summary
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.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_keyForThisReceiver

private final Osi7LongTelegramRecombine.ReceiverKey _keyForThisReceiver
Unter diesem Schlüssel ist das Objekt in einer Map gespeichert


_receiverManager

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.


_telegram

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.


_typeOfData

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.)


_numberOfNeededPieces

private int _numberOfNeededPieces
Speichert wieviele Stücke insgesamt zu einem Lang-Telegramm gehören (dieser Wert wird nur bei Big und Bigger Paketen benutzt)


_numberOfPiecesReceived

private int _numberOfPiecesReceived
Speichert wieviele Pakete bisher empfangen wurden (daraus ergibt sich auch die Nummer des nächsten Stücks, das erwartet wird)


_currentByteArrayPosition

private int _currentByteArrayPosition
Bestimmt, an welcher Stelle das empfangende Byte-Array eingefügt werden soll


_firstTelegramReceived

private boolean _firstTelegramReceived

_telegramFinished

private boolean _telegramFinished
Diese Variable wird true, sobald ein Telegramm fertiggestellt ist.

Constructor Detail

Osi7LongTelegramRecombine.Receiver

public Osi7LongTelegramRecombine.Receiver(Osi7LongTelegramRecombine.ReceiverKey keyForThisReceiver,
                                          Osi7LongTelegramRecombine receiverManager)
Method Detail

newData

public void newData(byte[] receivedData)

telegramCompleted

private void telegramCompleted()
Diese Methode wird aufgerufen, wenn ein Telegramm komplett empfangen wurde.


isTelegramFinished

public boolean isTelegramFinished()
Returns:
true = Das Langtelegramm wurde rekombiniert und kann weitergereicht werden; false = Das Langtelegramm wurde noch nicht fertiggestellt

getLongTelegram

public byte[] getLongTelegram()
                       throws IllegalStateException
Gibt das fertige Telegramm zurück und entfernt den Empfänger aus der Liste von Empfängern.

Returns:
fertiges Langtelegramm
Throws:
IllegalStateException - Das Langtelegramm wurde noch nicht fertiggestellt

toString

public String toString()
Overrides:
toString in class Object

cancelReceiver

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.


handleSecondStartTelegram

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.


isFirstTelegram

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.

Parameters:
firstTelegram - Telegramm, das geprüft werden soll.
Returns:

analyzeFirstTelegram

private void analyzeFirstTelegram(byte[] firstTelegram)
                           throws 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.

Parameters:
firstTelegram - Telegramm, das geprüft werden soll
Throws:
IllegalStateException - Das übergebene Telegramm ist kein gültiges erstes Paket (ShortBlock, StartBigBlock, StartBiggerBlock)