de.bsvrz.kex.tls.osi2osi3.osi2.wancom
Class Server.Link

java.lang.Object
  extended by de.bsvrz.kex.tls.osi2osi3.osi2.api.AbstractDataLinkLayer.Link
      extended by de.bsvrz.kex.tls.osi2osi3.osi2.wancom.Server.Link
All Implemented Interfaces:
DataLinkLayer.Link, PropertyQueryInterface
Enclosing class:
Server

private class Server.Link
extends AbstractDataLinkLayer.Link
implements DataLinkLayer.Link, PropertyQueryInterface

Realisiert ein Verbindungsobjekt, das die Kommunikation mit einem einzelnen Kommunikationspartner verwaltet.


Field Summary
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  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  ByteBuffer _readBuffer
          Empfangspuffer für empfangene Telegramme
private  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  ServerSocketChannel _serverSocketChannel
          Enthält während des Verbindungsaufbau das Kommunikationsobjekt mit internem Serversocket, über den die Verbindung des Clients entgegengenommen wird; sonst null.
private  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  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
 
Fields inherited from class de.bsvrz.kex.tls.osi2osi3.osi2.api.AbstractDataLinkLayer.Link
_linkLock, _linkPropertyLock, _linkState, _remoteAddress
 
Constructor Summary
private Server.Link(int remoteAddress)
          Erzeugt ein neues Verbindungsobjekt.
 
Method Summary
 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(Selector selector)
          Asynchroner Verbindungsaufbau.
 DataLinkLayer getDataLinkLayer()
          Bestimmt das Kommunikationsprotokoll zu dem diese Verbindung gehört.
 String getProperty(String name)
          Liefert einen Parameterwert zurück.
 void handleAction(Server.ActionType action, Selector selector)
          Führt eine Aktion für dieses Verbindungsobjekt aus.
private  void handleAsyncSend(Selector selector)
          Führt den asynchronen Versand von noch zu versendenden Telegrammen aus.
 void handleSelection(SelectionKey selectionKey, 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.
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(Properties properties)
          Setzt neue Parameterwerte.
 void shutdown()
          Initiiert das Schließen der bestehenden Verbindung dieses Verbindungsobjekts
 
Methods inherited from class de.bsvrz.kex.tls.osi2osi3.osi2.api.AbstractDataLinkLayer.Link
getRemoteAddress, getState, notifyEvent, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface de.bsvrz.kex.tls.osi2osi3.osi2.api.DataLinkLayer.Link
getRemoteAddress, getState
 

Field Detail

_sendChannel

private final PriorityChannel _sendChannel
Priorisierte Queue mit den noch zu versendenden Telegrammen


_serverSocketChannel

private ServerSocketChannel _serverSocketChannel
Enthält während des Verbindungsaufbau das Kommunikationsobjekt mit internem Serversocket, über den die Verbindung des Clients entgegengenommen wird; sonst null.


_socketChannel

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


_properties

private Properties _properties
Enthält die online änderbaren Parameter für diese Verbindung


_propertyConsultant

private final PropertyConsultant _propertyConsultant
Wrapper-Objekt zum bequemen Zugriff auf die online änderbaren Parameter dieser Verbindung


_wanComVersion

private int _wanComVersion
Versionsfeld der WanCom-Telegramme


_wanComKeepAliveTimeSeconds

private int _wanComKeepAliveTimeSeconds
Intervallzeit in Sekunden für den Versand und Empfang von Keep-Alive-Telegrammen


_wanComKeepAliveTimeoutCount

private int _wanComKeepAliveTimeoutCount
Anzahl Intervalle ohne Empfang eines Keep-Alive-Telegramms nach der eine bestehende Verbindung abgebrochen und neu aufgebaut wird.


_wanComConnectRetryDelay

private int _wanComConnectRetryDelay
Wartezeit in Sekunden, die nach einem fehlerbedingten Verbindungsabbruch gewartet wird, bevor die Verbindung neu aufgebaut wird.


_timer

private final Timer _timer
Timerobjekt mit dem zukünftige Aktionen geplant und ausgeführt werden


_readBuffer

private final ByteBuffer _readBuffer
Empfangspuffer für empfangene Telegramme


_sendBuffer

private final ByteBuffer _sendBuffer
Sendepuffer für versendete Telegramme


_wanComKeepAliveType

private int _wanComKeepAliveType
WanCom-Typfeld ind Keep-Alive-Telegrammen


_wanComIgnoreIpRouting

private boolean _wanComIgnoreIpRouting
WanCom-IP-Routing ignorieren


_wanComTlsType

private int _wanComTlsType
WanCom-Typ für versendete TLS-Telegramme


_wanComTlsTypeReceive

private int _wanComTlsTypeReceive
WanCom-Typ für empfangene TLS-Telegramme, -1 bedeutet, dass beliebige Typen akzeptiert werden


_lastKeepAliveReceive

private long _lastKeepAliveReceive
Zeitpunkt des letzten empfangenen Keep-Alive-Telegramms in Millisekunden


_keepAliveReceiveTimeoutCount

private int _keepAliveReceiveTimeoutCount
Anzahl Intervall, in denen aktuell in Folge kein Keep-Alive-Telegramm empfangen wurde.


_sendKeepAlive

private boolean _sendKeepAlive
Flag das signalisiert, dass ein Keep-Alive-Telegramm versendet werden soll


_wanComIp8

private byte[] _wanComIp8
Lokale IP-Adresse, die in versendeten Telegrammen eingetragen wird.


_packetOnTheAir

byte[] _packetOnTheAir
Aktuell asynchron zu sendendes Telegramm

Constructor Detail

Server.Link

private Server.Link(int remoteAddress)
Erzeugt ein neues Verbindungsobjekt.

Parameters:
remoteAddress - OSI-2 Adresse des Kommunikationspartners
Method Detail

notifyWorker

private void notifyWorker(Server.ActionType action)
Sendet eine Aktion für dieses Verbindungsobjekt zur Ausführung an den Protokoll-Thread.

Parameters:
action - Auszuführende Aktion

getDataLinkLayer

public DataLinkLayer getDataLinkLayer()
Description copied from interface: DataLinkLayer.Link
Bestimmt das Kommunikationsprotokoll zu dem diese Verbindung gehört.

Specified by:
getDataLinkLayer in interface DataLinkLayer.Link
Returns:
Das zu dieser Verbindung gehörende Protokollmodul

getProperty

public String getProperty(String name)
Liefert einen Parameterwert zurück.

Specified by:
getProperty in interface DataLinkLayer.Link
Specified by:
getProperty in interface PropertyQueryInterface
Parameters:
name - Name des gewünschten Parameterwerts.
Returns:
Gewünschter Parameterwert.
See Also:
DataLinkLayer.Link.setProperties(java.util.Properties), DataLinkLayer.getProperty(java.lang.String)

setProperties

public void setProperties(Properties properties)
Setzt neue Parameterwerte.

Specified by:
setProperties in interface DataLinkLayer.Link
Parameters:
properties - Neue Parameterwerte.

connect

public void connect()
Initiiert den Verbindungsaufbau mit dem Kommunikationspartner dieses Verbindungsobjekts

Specified by:
connect in interface DataLinkLayer.Link

shutdown

public void shutdown()
Initiiert das Schließen der bestehenden Verbindung dieses Verbindungsobjekts

Specified by:
shutdown in interface DataLinkLayer.Link

abort

public void abort()
Initiiert den sofortigen Abbruch der bestehenden Verbindung dieses Verbindungsobjekts

Specified by:
abort in interface DataLinkLayer.Link

reload

public void reload()
Initiiert den Abbruch und erneuten Verbindungsaufbau einer bestehenden Verbindung mit evtl. geänderten Parametern


send

public void send(byte[] bytes,
                 int priority)
          throws InterruptedException
Initiiert den Versand eines Telegramms.

Specified by:
send in interface DataLinkLayer.Link
Parameters:
bytes - Bytearray mit den Bytes des zu sendenden Telegramms.
priority - Priorität des zu sendenden Telegramms.
Throws:
InterruptedException - Wenn der aktuelle Thread unterbrochen wurde.

handleAction

public void handleAction(Server.ActionType action,
                         Selector selector)
Führt eine Aktion für dieses Verbindungsobjekt aus. Diese Methode wird vom Protokoll-Thread zur Verarbeitung einer Aktion aufgerufen.

Parameters:
action - Auszuführende Aktion
selector - Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.

handleAsyncSend

private void handleAsyncSend(Selector selector)
Führt den asynchronen Versand von noch zu versendenden Telegrammen aus.

Parameters:
selector - Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.

closeChannel

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.


closeChannel

private void closeChannel(int reconnectDelay)
Schließt den Kommunikationskanal zum Client und plant den erneuten Aufbau der Kommunikationsverbindung nach einer vorgebbaren Wartezeit ein.

Parameters:
reconnectDelay - Wartezeit nach der die Verbindung wieder aufgebaut werden soll.

handleSelection

public void handleSelection(SelectionKey selectionKey,
                            Selector selector)
Verarbeitet asynchrone Kommunikationsoperationen anhand der vom Selektor des Protokoll-Threads gelieferten Möglichkeiten

Parameters:
selectionKey - Vom Selektor des Protokoll-Threads gelieferte Kommunikationsmöglichkeiten
selector - Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.

connectSocketChannel

private void connectSocketChannel(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.

Parameters:
selector - Selektor des Protokoll-Threads zum asynchronen Zugriff auf die Kommunikationskanäle.

scheduleActionTimer

private void scheduleActionTimer(Server.ActionType actionType,
                                 int delaySeconds)
Plant eine Aktion mit Hilfe eines Timer-Objekts zur späteren Ausführung ein.

Parameters:
actionType - Auszuführende Aktion
delaySeconds - Verzögerungszeit in Sekunden nach der die Aktion ausgeführt werden soll.