private class Server.Link extends AbstractDataLinkLayer.Link implements DataLinkLayer.Link, PropertyQueryInterface
Realisiert ein Verbindungsobjekt, das die Kommunikation mit einem einzelnen Kommunikationspartner verwaltet.
Modifier and Type | Field and Description |
---|---|
private int |
_keepAliveReceiveTimeoutCount
Anzahl Intervall, in denen aktuell in Folge kein Keep-Alive-Telegramm empfangen wurde.
|
private long |
_lastKeepAliveReceive
Zeitpunkt des letzten empfangenen Keep-Alive-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 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 PriorityChannel |
_sendChannel
Priorisierte Queue mit den noch zu versendenden Telegrammen
|
private boolean |
_sendKeepAlive
Flag das signalisiert, dass ein Keep-Alive-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 |
_wanComConnectRetryDelay
Wartezeit in Sekunden, die nach einem fehlerbedingten Verbindungsabbruch gewartet wird, bevor die Verbindung neu aufgebaut wird.
|
private boolean |
_wanComIgnoreIpRouting
WanCom-IP-Routing ignorieren
|
private byte[] |
_wanComIp8
Lokale IP-Adresse, die in versendeten Telegrammen eingetragen wird.
|
private int |
_wanComKeepAliveTimeoutCount
Anzahl Intervalle ohne Empfang eines Keep-Alive-Telegramms nach der eine bestehende Verbindung abgebrochen und neu aufgebaut wird.
|
private int |
_wanComKeepAliveTimeSeconds
Intervallzeit in Sekunden für den Versand und Empfang von Keep-Alive-Telegrammen
|
private int |
_wanComKeepAliveType
WanCom-Typfeld ind Keep-Alive-Telegrammen
|
private int |
_wanComTlsType
WanCom-Typ für versendete TLS-Telegramme
|
private int |
_wanComTlsTypeReceive
WanCom-Typ für empfangene TLS-Telegramme, -1 bedeutet, dass beliebige Typen akzeptiert werden
|
private int |
_wanComVersion
Versionsfeld der WanCom-Telegramme
|
_linkLock, _linkPropertyLock, _linkState, _remoteAddress
Modifier | Constructor and Description |
---|---|
private |
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 plant den erneuten Aufbau der Kommunikationsverbindung nach der durch den Parameter “wancom.connectRetryDelay” vorgebbaren Wartezeit ein.
|
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.
|
DataLinkLayer |
getDataLinkLayer()
Bestimmt das Kommunikationsprotokoll zu dem diese Verbindung gehört.
|
java.lang.String |
getProperty(java.lang.String name)
Liefert einen Parameterwert zurück.
|
void |
handleAction(Server.ActionType action,
java.nio.channels.Selector selector)
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)
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.
|
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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getRemoteAddress, getState
private final PriorityChannel _sendChannel
Priorisierte Queue mit den noch zu versendenden Telegrammen
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.Properties _properties
Enthält die online änderbaren Parameter für diese Verbindung
private final PropertyConsultant _propertyConsultant
Wrapper-Objekt zum bequemen Zugriff auf die online änderbaren Parameter dieser Verbindung
private int _wanComVersion
Versionsfeld der WanCom-Telegramme
private int _wanComKeepAliveTimeSeconds
Intervallzeit in Sekunden für den Versand und Empfang von Keep-Alive-Telegrammen
private int _wanComKeepAliveTimeoutCount
Anzahl Intervalle ohne Empfang eines Keep-Alive-Telegramms nach der eine bestehende Verbindung abgebrochen und neu aufgebaut wird.
private int _wanComConnectRetryDelay
Wartezeit in Sekunden, die nach einem fehlerbedingten Verbindungsabbruch gewartet wird, bevor die Verbindung neu aufgebaut wird.
private final java.util.Timer _timer
Timerobjekt mit dem zukünftige Aktionen geplant und ausgeführt werden
private final java.nio.ByteBuffer _readBuffer
Empfangspuffer für empfangene Telegramme
private final java.nio.ByteBuffer _sendBuffer
Sendepuffer für versendete Telegramme
private int _wanComKeepAliveType
WanCom-Typfeld ind Keep-Alive-Telegrammen
private boolean _wanComIgnoreIpRouting
WanCom-IP-Routing ignorieren
private int _wanComTlsType
WanCom-Typ für versendete TLS-Telegramme
private int _wanComTlsTypeReceive
WanCom-Typ für empfangene TLS-Telegramme, -1 bedeutet, dass beliebige Typen akzeptiert werden
private long _lastKeepAliveReceive
Zeitpunkt des letzten empfangenen Keep-Alive-Telegramms in Millisekunden
private int _keepAliveReceiveTimeoutCount
Anzahl Intervall, in denen aktuell in Folge kein Keep-Alive-Telegramm empfangen wurde.
private boolean _sendKeepAlive
Flag das signalisiert, dass ein Keep-Alive-Telegramm versendet werden soll
private byte[] _wanComIp8
Lokale IP-Adresse, die in versendeten Telegrammen eingetragen wird.
byte[] _packetOnTheAir
Aktuell asynchron zu sendendes Telegramm
private Link(int remoteAddress)
Erzeugt ein neues Verbindungsobjekt.
remoteAddress
- OSI-2 Adresse des Kommunikationspartnersprivate void notifyWorker(Server.ActionType action)
Sendet eine Aktion für dieses Verbindungsobjekt zur Ausführung an den Protokoll-Thread.
action
- Auszuführende Aktionpublic DataLinkLayer getDataLinkLayer()
DataLinkLayer.Link
Bestimmt das Kommunikationsprotokoll zu dem diese Verbindung gehört.
getDataLinkLayer
in interface DataLinkLayer.Link
public java.lang.String getProperty(java.lang.String name)
Liefert einen Parameterwert zurück.
getProperty
in interface DataLinkLayer.Link
getProperty
in interface PropertyQueryInterface
name
- Name des gewünschten Parameterwerts.DataLinkLayer.Link.setProperties(java.util.Properties)
,
DataLinkLayer.getProperty(java.lang.String)
public void setProperties(java.util.Properties properties)
Setzt neue Parameterwerte.
setProperties
in interface DataLinkLayer.Link
properties
- Neue Parameterwerte.public void connect()
Initiiert den Verbindungsaufbau mit dem Kommunikationspartner dieses Verbindungsobjekts
connect
in interface DataLinkLayer.Link
public void shutdown()
Initiiert das Schließen der bestehenden Verbindung dieses Verbindungsobjekts
shutdown
in interface DataLinkLayer.Link
public void abort()
Initiiert den sofortigen Abbruch der bestehenden Verbindung dieses Verbindungsobjekts
abort
in interface DataLinkLayer.Link
public void reload()
Initiiert den Abbruch und erneuten Verbindungsaufbau einer bestehenden Verbindung mit evtl. geänderten Parametern
public void send(byte[] bytes, int priority) throws java.lang.InterruptedException
Initiiert den Versand eines Telegramms.
send
in interface 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 handleAction(Server.ActionType action, java.nio.channels.Selector selector)
Führt eine Aktion für dieses Verbindungsobjekt aus. Diese Methode wird vom Protokoll-Thread zur Verarbeitung einer Aktion aufgerufen.
action
- Auszuführende Aktionselector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.private void handleAsyncSend(java.nio.channels.Selector selector)
Führt den asynchronen Versand von noch zu versendenden Telegrammen aus.
selector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.private void closeChannel()
Schließt den Kommunikationskanal zum Client und plant den erneuten Aufbau der Kommunikationsverbindung nach der durch den Parameter “wancom.connectRetryDelay” vorgebbaren Wartezeit ein.
private void closeChannel(int reconnectDelay)
Schließt den Kommunikationskanal zum Client und plant den erneuten Aufbau der Kommunikationsverbindung nach einer vorgebbaren Wartezeit ein.
reconnectDelay
- Wartezeit nach der die Verbindung wieder aufgebaut werden soll.public 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
selectionKey
- Vom Selektor des Protokoll-Threads gelieferte Kommunikationsmöglichkeitenselector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.private void connectSocketChannel(java.nio.channels.Selector selector)
Asynchroner Verbindungsaufbau. Zum Aufbau der Kommunikationsverbindung wird ein Kommunikationskanal mit einem Serversocket initialisiert, der auf dem gewünschten TCP-Port Verbindungen entgegennimmt. Nachdem Verbindungsaufbau wird der Serversocket wieder geschlossen und ein neuer Kommunikationskanal für den Datenaustausch initialisiert.
selector
- Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.private void scheduleActionTimer(Server.ActionType actionType, int delaySeconds)
Plant eine Aktion mit Hilfe eines Timer-Objekts zur späteren Ausführung ein.
actionType
- Auszuführende AktiondelaySeconds
- Verzögerungszeit in Sekunden nach der die Aktion ausgeführt werden soll.