|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.bsvrz.dav.daf.communication.lowLevel.LowLevelCommunication
public class LowLevelCommunication
Klasse zur Verwaltung der unteren Ebene von Datenverteilerverbindungen.
Die Aufgabe dieser Klasse ist es Telegramme zu versenden, zu empfangen und KeepAlive-Mechanismus zu verwalten. Jede dieser Aufgaben wird durch mindestens einen Thread übernommen: Empfang von Daten: ReceivingChannel (nimmt die Daten entgegen und legt diese in _receivingTable ab. Bei Konfigurationsanfragen kann es zur Zerstücklung von Telegrammen kommen, diese Teiltelgramme werden in _splittedTelegramsTable abgelegt und dort mit jedem empfang eines Teiltelegramms langsam zusammen gebaut und nach Vollendung an ClientHighLevelCommunication durchgereicht (nicht über den Worker-Thread). Beim empfang von Daten wird der KeepAlive-Thread benachrichtigt.), WorkerThread (bearbeitet die _receivingTable und reicht empfangene Telegramme an ClientHighLevelCommunication weiter). Versand von Daten: SendingChannel (verschickt Telegramme aus der _sendingTable und benachrichtigt den KeepAlive Thread, sobald Daten verschickt wurden. Prüft die Laufzeit der einzelnen Telegramme und unterbricht die Verbindung sobald diese einen kritischen Wert unterschreitet). KeepAlive-Mechanismus: KeepAliveThread (Verwaltet ob ein "KeepAlive" Telegramm verschickt werden muss. Dies ist abhängig davon, ob eine Telegramm versendet/empfangen wurde. Wurde eine bestimmte Anzahl Keepalive Telegramme versendet, so wird die Verbindung abgebaut. Wird nach dem versand eines KeepAlive Telegramms ein normales Telegramm empfangen/gesendet, so wird der KeepAlive-Telegrammzähler wieder auf 0 gesetzt. Anmerkung: Das KeepAlive Paket wird nicht über den SendingChannel-Thread verschickt, sondern direkt über den Outputstream.) Alle vollständigen Telegramme werden in zwei TelegramQueue-Objekten gespeichert (eine für den Empfang, eine für den Versand). Die oben beschriebenen Threads (ausser der KeepAlive-Thread) arbeiten und synchronisieren sich auf den jeweiligen "PriorityTables". Begriffsdefinitionen: Protokollsteuerung DaV-DAF (Klasse ClientHighLevelCommunication), Datenrepräsentation (Klassen DataInputStream und DataOutputStream), TCP-Kommunikationskanal (Klasse TCP_IP_Communication)
Field Summary | |
---|---|
static byte |
HANDLE_CONFIG_RESPONCES_MODE
Wert für den mode -Parameter des Konstruktors, der bewirkt, dass Konfigurationsantworten ausgewertet und entsprechend an die höhere
Kommunikationsebene weitergegeben werden. |
static byte |
NORMAL_MODE
Wert für den mode -Parameter des Konstruktors, der bewirkt, dass Konfigurationsantworten wie normale Datentelegramme verarbeitet werden. |
Constructor Summary | |
---|---|
LowLevelCommunication(ConnectionInterface connection,
int sendBufferSize,
int receiveBufferSize,
long keepAliveSendTimeOut,
long keepAliveReceiveTimeOut,
byte mode,
boolean connected)
|
Method Summary | |
---|---|
void |
connect(String mainAddress,
int subAddress)
Diese Methode baut eine Kommunikationsverbindung zu den angegebenen Adressen auf. Nach dem Verbindungsaufbau werden die Referenzen auf den Sende- und den Empfangskanal festgehalten. |
void |
disconnect(boolean error,
String message,
DataTelegram terminationTelegram)
Diese Methode wird von der Protokollschicht DaV-DAF aufgerufen, wenn die Kommunikationskanäle geschlossen werden sollen. |
ConnectionInterface |
getConnectionInterface()
Gibt den Repräsentant der Verbindung zurück |
String |
getSendBufferState()
Liefert einen beschreibenden Text mit dem Zustand des Sendepuffers |
boolean |
isNotConnected()
Gibt als Information zurück, ob die Kommunikationsverbindung unterbrochen ist. |
void |
send(DataTelegram telegram)
Diese Methode wird von der Protokollschicht DaV-DAF aufgerufen, wenn ein Telegramm gesendet werden soll. |
void |
send(DataTelegram[] telegrams)
Fügt mehrere Telegramme in die Sendetabelle ein. |
void |
setHighLevelComponent(HighLevelCommunicationCallbackInterface highLevelComponent)
Setzt die Interpretationsschicht dieser Komponente für den internen Datenaustausch. |
void |
updateKeepAliveParameters(long keepAliveSendTimeOut,
long keepAliveReceiveTimeOut)
Diese Methode wird von der Protokollschicht DaV-DAF aufgerufen, wenn die Keepalive-Parameter-Verhandlung erfolgreich abgeschlossen ist und setzt somit die Timeouts des Keepaliveprozesses. |
void |
updateThroughputParameters(float throughputControlSendBufferFactor,
long throughputControlInterval,
int minimumThroughput)
Diese Methode setzt die Parameter für die Durchsatzprüfung. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final byte NORMAL_MODE
mode
-Parameter des Konstruktors, der bewirkt, dass Konfigurationsantworten wie normale Datentelegramme verarbeitet werden.
public static final byte HANDLE_CONFIG_RESPONCES_MODE
mode
-Parameter des Konstruktors, der bewirkt, dass Konfigurationsantworten ausgewertet und entsprechend an die höhere
Kommunikationsebene weitergegeben werden.
Constructor Detail |
---|
public LowLevelCommunication(ConnectionInterface connection, int sendBufferSize, int receiveBufferSize, long keepAliveSendTimeOut, long keepAliveReceiveTimeOut, byte mode, boolean connected) throws ConnectionException
connection
- Verbindungsobjekt über dass die Kommunikation mit dem Kommunikationspartner realisiert wird.sendBufferSize
- Sendetabellenkapazität (in Byte)receiveBufferSize
- Empfangstabellenkapazität (in Byte)keepAliveSendTimeOut
- Zeitspanne in ms. Wird solange kein Telegramm verschickt, wird ein KeepAlive-Telegramm verschickt.keepAliveReceiveTimeOut
- Zeitspanne in ms. Wird solange keine Telegramm empfangen, wird ein Zähler herabgesetzt. Erreicht der Zähler 0 wird die
Verbindung terminiert. Wird zwischendurch ein Telegramm empfangen, wird der Zähler auf das maximum gesetzt.mode
- Modus für das Konfigurationsdatenverhalten. Falls hier der Wert HANDLE_CONFIG_RESPONCES_MODE
übergeben wird, dann
werden Konfigurationsantworten ausgewertet und entsprechend an die höhere Kommunikationsebene weitergegeben. Falls hier der
Wert NORMAL_MODE
übergeben wird, dann werden Konfigurationsantworten wie normale Datentelegramme verarbeitet.connected
- Information, ob die Verbindung bereits erfolgt ist oder nicht (connected)
ConnectionException
- Wenn das Verbindungsobjekt sich nicht im erwarteten Zustand befindet.Method Detail |
---|
public final ConnectionInterface getConnectionInterface()
LowLevelCommunicationInterface
getConnectionInterface
in interface LowLevelCommunicationInterface
public final void setHighLevelComponent(HighLevelCommunicationCallbackInterface highLevelComponent)
LowLevelCommunicationInterface
setHighLevelComponent
in interface LowLevelCommunicationInterface
highLevelComponent
- Komponente, die benachrichtigt werden muss, wenn neue Nachrichten empfangen werden.public final void updateKeepAliveParameters(long keepAliveSendTimeOut, long keepAliveReceiveTimeOut)
LowLevelCommunicationInterface
updateKeepAliveParameters
in interface LowLevelCommunicationInterface
keepAliveSendTimeOut
- SendekeepalivetimeoutkeepAliveReceiveTimeOut
- Empfangekeepalivetimeoutpublic final void updateThroughputParameters(float throughputControlSendBufferFactor, long throughputControlInterval, int minimumThroughput)
LowLevelCommunicationInterface
updateThroughputParameters
in interface LowLevelCommunicationInterface
throughputControlSendBufferFactor
- Füllungsgrad des Sendepuffers als Faktor zwischen 0 und 1, ab dem die Durchsatzprüfung anfängt zu arbeiten.throughputControlInterval
- Zeit zwischen zwei Durchsatzprüfungen in MillisekundenminimumThroughput
- Minimal zulässiger Verbindungsdurchsatz in Bytes pro Sekundepublic final void connect(String mainAddress, int subAddress) throws ConnectionException
connect
in interface LowLevelCommunicationInterface
mainAddress
- Adresse des Kommunikationspartners dieser Verbindung.subAddress
- Subadresse der Adresse.
ConnectionException
- Falls die Verbindung nicht hergestellt werden kann.public final boolean isNotConnected()
LowLevelCommunicationInterface
isNotConnected
in interface LowLevelCommunicationInterface
true
= Es besteht keine Verbindung; false
= sonstpublic final void send(DataTelegram telegram)
send
in interface LowLevelCommunicationInterface
telegram
- Das zu versendende Telegramm.public final void send(DataTelegram[] telegrams)
LowLevelCommunicationInterface
send
in interface LowLevelCommunicationInterface
telegrams
- Die zu versendenden Telegramme.LowLevelCommunicationInterface.send(de.bsvrz.dav.daf.communication.lowLevel.telegrams.DataTelegram)
public final void disconnect(boolean error, String message, DataTelegram terminationTelegram)
disconnect
in interface LowLevelCommunicationInterface
error
- Besagt, ob es sich um eine Terminierung mit Fehler handelt. Falls true
werden sämtliche noch zum Versand gepufferten Telegramme
verworfen; falls false
wird versucht, sämtliche zum Versand gepufferten Telegramme zu versenden.message
- Ursache der Terminierung im Fehlerfall.terminationTelegram
- Das Telegramm, dass als letztes Telegramm vor dem Schließen der Verbindung versendet werden soll oder null
, falls
kein abschließendes Telegramm versendet werden soll.public String getSendBufferState()
LowLevelCommunicationInterface
getSendBufferState
in interface LowLevelCommunicationInterface
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |