private class Server.Link
extends de.bsvrz.kex.tls.osi2osi3.osi2.api.AbstractDataLinkLayer.Link
implements de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link, de.bsvrz.kex.tls.osi2osi3.properties.PropertyQueryInterface
Modifier and Type | Field and Description |
---|---|
private int |
_countReceiptDataTel
Anzahl der empfangenen Daten-Telegramme seit des letzten Quittungstelegramm-Versands
|
private int |
_countSendDataTel
Anzahl des gesendeten Daten-Telegramme seit des letzten Quittungstelegramm-Empfangs
|
private int |
_lastQuittSeqNumDataTel
Sequenznummer des letzten quittierten Daten-Telegramms
|
private int |
_lastReceiptSeqNumDataTel
Sequenznummer des letzten empfangenen Daten-Telegramms
|
private long |
_lastReceiptTimeAllTel
Zeitpunkt des letzten empfangenen Telegramms (Keep-Alive, Quittung oder Daten) in Millisekunden
|
private long |
_lastReceiptTimeDataTel
Zeitpunkt des letzten empfangenen Daten-Telegramms in Millisekunden
|
private int |
_lastSendSeqNumDataTel
Sequenznummer des letzten gesendeten Daten-Telegramms
|
private long |
_lastSendTimeAllTel
Zeitpunkt des letzten gesendeten Telegramms (Keep-Alive, Quittung oder Daten) in Millisekunden
|
private long |
_lastSendTimeDataTel
Zeitpunkt des letzten gesendeten Daten-Telegramms in Millisekunden
|
(package private) byte[] |
_packetOnTheAir
Aktuell asynchron zu sendendes Telegramm
|
private java.util.Properties |
_properties
Enthält die online änderbaren Parameter für diese Verbindung
|
private de.bsvrz.kex.tls.osi2osi3.properties.PropertyConsultant |
_propertyConsultant
Wrapper-Objekt zum bequemen Zugriff auf die online änderbaren Parameter dieser Verbindung
|
private java.nio.ByteBuffer |
_readBuffer
Empfangspuffer für empfangene Telegramme
|
private java.nio.ByteBuffer |
_sendBuffer
Sendepuffer für versendete Telegramme
|
private de.bsvrz.sys.funclib.concurrent.PriorityChannel |
_sendChannel
Priorisierte Queue mit den noch zu versendenden Telegrammen
|
private boolean |
_sendKeepAliveTel
Flag das signalisiert, dass ein Keep-Alive-Telegramm versendet werden soll
|
private boolean |
_sendQuittTel
Flag das signalisiert, dass ein Quittungs-Telegramm versendet werden soll
|
private java.nio.channels.ServerSocketChannel |
_serverSocketChannel
Enthält während des Verbindungsaufbau das Kommunikationsobjekt mit internem Serversocket, über den die Verbindung
des Clients entgegengenommen wird; sonst
null . |
private java.nio.channels.SocketChannel |
_socketChannel
Enthält während einer bestehenden Verbindung das Kommunikationsobjekt mit internem Server, über den der
Datenaustausch mit dem Client abgewickelt wird; sonst
null . |
private java.util.Timer |
_timer
Timerobjekt mit dem zukünftige Aktionen geplant und ausgeführt werden
|
private int |
_tlsoipCAcceptPort
Serverport, auf dem Anfragen entgegengenommen werden.
|
private int |
_tlsoipCHelloDelay
Zeit [s], nach der ein Keep-Alive-Telegramm an die Gegenstelle versendet werden muss (0=ausgeschaltet für
Testzwecke, 1...3599)
|
private int |
_tlsoipCHelloTimeout
Zeit [s], nach der spätestens ein Keep-Alive-Telegramm der Gegenstelle erwartet wird ( > C_HelloDelay der
Gegenstelle), (0=ausgeschaltet für Testzwecke, 1...3600)
|
private int |
_tlsoipCReceiptCount
Anzahl empfangener/gesendeter Telegramme, nach der spätestens ein Quittungstelegramm versendet werden muss/erwartet
wird (1..255)
|
private int |
_tlsoipCReceiptDelay
Zeit [s], nach der nach Erhalt eines Telegramms spätenstens ein Quittierungstelegramm an die Gegenstelle versendet
werden muss (1..59)
|
private int |
_tlsoipCReceiptTimeout
Zeit [s], nach der spätestens ein Quittungstelegramm von der Gegenstelle erwartet wird (> C_ReceiptDelay der
Gegenstelle) (1..60)
|
private boolean |
_tlsoipCReceiptTimeoutGestartet
Flag das signalisiert, dass Timer für die Quittungsüberwachung nach Datenversand einmal gestartet werden muss.
|
Modifier | Constructor and Description |
---|---|
private |
Server.Link(int remoteAddress)
Erzeugt ein neues Verbindungsobjekt.
|
Modifier and Type | Method and Description |
---|---|
void |
abort()
Initiiert den sofortigen Abbruch der bestehenden Verbindung dieses Verbindungsobjekts
|
private void |
closeChannel()
Schließt den Kommunikationskanal zum Client und wartet auf neuen Verbindungsaufbau seitens des Client.
|
private void |
closeChannel(int reconnectDelay)
Schließt den Kommunikationskanal zum Client und plant den erneuten Aufbau der Kommunikationsverbindung nach einer
vorgebbaren Wartezeit ein.
|
void |
connect()
Initiiert den Verbindungsaufbau mit dem Kommunikationspartner dieses Verbindungsobjekts
|
private void |
connectSocketChannel(java.nio.channels.Selector selector)
Asynchroner Verbindungsaufbau.
|
de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer |
getDataLinkLayer() |
int |
getNextSeqNum(int num)
Ermittelt auf Basis der aktullen SeqNum des Daten-Telegramm die nächste folgende Nummer.
|
java.lang.String |
getProperty(java.lang.String name)
Liefert einen Parameterwert zurück.
|
void |
handleAction(Server.ActionType action,
java.nio.channels.Selector selector,
int seqNum,
boolean sofortQuittieren)
Führt eine Aktion für dieses Verbindungsobjekt aus.
|
private void |
handleAsyncSend(java.nio.channels.Selector selector)
Führt den asynchronen Versand von noch zu versendenden Telegrammen aus.
|
void |
handleSelection(java.nio.channels.SelectionKey selectionKey,
java.nio.channels.Selector selector)
Verarbeitet asynchrone Kommunikationsoperationen anhand der vom Selektor des Protokoll-Threads gelieferten
Möglichkeiten
|
private void |
notifyWorker(Server.ActionType action,
int seqNum,
boolean sofortQuittieren)
Sendet eine Aktion für dieses Verbindungsobjekt zur Ausführung an den Protokoll-Thread.
|
void |
reload()
Initiiert den Abbruch und erneuten Verbindungsaufbau einer bestehenden Verbindung mit evtl. geänderten Parametern
|
private void |
scheduleActionTimer(Server.ActionType actionType,
int delaySeconds)
Plant eine Aktion mit Hilfe eines Timer-Objekts zur späteren Ausführung ein.
|
private void |
scheduleActionTimer(Server.ActionType actionType,
int delaySeconds,
int seqNum)
Plant eine Aktion mit Hilfe eines Timer-Objekts zur späteren Ausführung ein.
|
private void |
scheduleActionTimer(Server.ActionType actionType,
int delaySeconds,
int seqNum,
boolean sofortQuittieren)
Plant eine Aktion mit Hilfe eines Timer-Objekts zur späteren Ausführung ein.
|
void |
send(byte[] bytes,
int priority)
Initiiert den Versand eines Telegramms.
|
void |
setProperties(java.util.Properties properties)
Setzt neue Parameterwerte.
|
void |
shutdown()
Initiiert das Schließen der bestehenden Verbindung dieses Verbindungsobjekts
|
getRemoteAddress, getState, notifyEvent, toString
private final de.bsvrz.kex.tls.osi2osi3.properties.PropertyConsultant _propertyConsultant
private final de.bsvrz.sys.funclib.concurrent.PriorityChannel _sendChannel
private int _countReceiptDataTel
private int _countSendDataTel
private int _lastQuittSeqNumDataTel
private int _lastReceiptSeqNumDataTel
private long _lastReceiptTimeAllTel
private long _lastReceiptTimeDataTel
private int _lastSendSeqNumDataTel
private long _lastSendTimeAllTel
private long _lastSendTimeDataTel
private boolean _sendKeepAliveTel
private boolean _sendQuittTel
private java.nio.channels.ServerSocketChannel _serverSocketChannel
null
.private java.nio.channels.SocketChannel _socketChannel
null
.private int _tlsoipCAcceptPort
private int _tlsoipCHelloDelay
private int _tlsoipCHelloTimeout
private int _tlsoipCReceiptCount
private int _tlsoipCReceiptDelay
private int _tlsoipCReceiptTimeout
private boolean _tlsoipCReceiptTimeoutGestartet
byte[] _packetOnTheAir
private java.util.Properties _properties
private final java.util.Timer _timer
private final java.nio.ByteBuffer _sendBuffer
private final java.nio.ByteBuffer _readBuffer
private Server.Link(int remoteAddress)
remoteAddress
- OSI-2 Adresse des Kommunikationspartnerspublic void abort()
abort
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
private void closeChannel()
private void closeChannel(int reconnectDelay)
reconnectDelay
- Wartezeit nach der die Verbindung wieder aufgebaut werden soll.public void connect()
connect
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
private void connectSocketChannel(java.nio.channels.Selector selector)
selector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.public de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer getDataLinkLayer()
getDataLinkLayer
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
public int getNextSeqNum(int num)
num
- Aktuelle SeqNum des Daten Telegrammspublic java.lang.String getProperty(java.lang.String name)
getProperty
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
getProperty
in interface de.bsvrz.kex.tls.osi2osi3.properties.PropertyQueryInterface
name
- Name des gewünschten Parameterwerts.public void handleAction(Server.ActionType action, java.nio.channels.Selector selector, int seqNum, boolean sofortQuittieren)
action
- Auszuführende Aktionselector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.seqNum
- SequenzNummer des Telegramms, welches quittiert werden sollsofortQuittieren
- true
, wenn Quittierung in jedem Fall sofort erfolgen soll, sonstprivate void handleAsyncSend(java.nio.channels.Selector selector)
selector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.public void handleSelection(java.nio.channels.SelectionKey selectionKey, java.nio.channels.Selector selector)
selectionKey
- Vom Selektor des Protokoll-Threads gelieferte Kommunikationsmöglichkeitenselector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.private void notifyWorker(Server.ActionType action, int seqNum, boolean sofortQuittieren)
action
- Auszuführende AktionseqNum
- SequenzNummer des Telegramms, welches quittiert werden sollsofortQuittieren
- true
, wenn Quittierung in jedem Fall sofort erfolgen soll, sonst
false
.public void reload()
private void scheduleActionTimer(Server.ActionType actionType, int delaySeconds)
actionType
- Auszuführende AktiondelaySeconds
- Verzögerungszeit in Sekunden nach der die Aktion ausgeführt werden soll.private void scheduleActionTimer(Server.ActionType actionType, int delaySeconds, int seqNum)
actionType
- Auszufhrende AktiondelaySeconds
- Verzögerungszeit in Sekunden nach der die Aktion ausgeführt werden soll.seqNum
- SequenzNummer des letzten empfangenen Datentelegrammsprivate void scheduleActionTimer(Server.ActionType actionType, int delaySeconds, int seqNum, boolean sofortQuittieren)
actionType
- Auszufhrende AktiondelaySeconds
- Verzögerungszeit in Sekunden nach der die Aktion ausgeführt werden soll.seqNum
- SequenzNummer des Telegramms, welches quittiert werden sollsofortQuittieren
- true
, wenn Quittierung in jedem Fall sofort erfolgen soll, sonst
false
.public void send(byte[] bytes, int priority) throws java.lang.InterruptedException
send
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
bytes
- Bytearray mit den Bytes des zu sendenden Telegramms.priority
- Priorität des zu sendenden Telegramms.java.lang.InterruptedException
- Wenn der aktuelle Thread unterbrochen wurde.public void setProperties(java.util.Properties properties)
setProperties
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
properties
- Neue Parameterwerte.public void shutdown()
shutdown
in interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link