public class ClientHighLevelCommunication extends java.lang.Object implements HighLevelCommunicationCallbackInterface
Constructor and Description |
---|
ClientHighLevelCommunication()
Dieser Konstruktor wird für JUnit-Tests gebraucht.
|
ClientHighLevelCommunication(ClientDavParameters clientDavParameters,
ApplicationCloseActionHandler closer)
Dieser Konstruktor erzeugt eine Instanz dieser Klasse mit den übergebenen Parametern.
|
Modifier and Type | Method and Description |
---|---|
void |
completeInitialisation(ConfigurationManager configurationManager,
CacheManager cacheManager,
SubscriptionManager subscriptionManager)
Schließt die Initialisierung ab.
|
void |
disconnected(boolean error,
java.lang.String message)
Wird von der unteren Kommunikationsschicht in Fehlersituationen zum Abbruch der Kommunikationsverbindung aufgerufen.
|
long |
getApplicationId()
Gibt die Id der Applikation zurück.
|
AuthenticationStatus |
getAuthenticationStatus() |
long |
getConfigurationId()
Gibt die Id der Konfiguration zurück.
|
ClientConnectionProperties |
getConnectionProperties()
Diese Methode gibt die Eigenschaften dieser Verbindung zurück.
|
long |
getDataTransmitterId()
Gibt die Id des Datenverteilers zurück.
|
EncryptionStatus |
getEncryptionStatus() |
java.util.List<DataTelegram> |
getSyncSystemTelegramList()
Gibt die temporäre Liste der Systemtelegramme für interne Synchronisationszwecke zurück.
|
long |
getTelegramTime(long maxWaitingTime)
Schickt ein Laufzeitermittlungs-Telegramm zum Datenverteiler und wartet auf seine Antwort, um herauszubekommen, wie viel Zeit die Übertragung
in Anspruch nimmt.
|
long |
getUserId()
Gibt die Id des Benutzers zurück.
|
boolean |
isDisconnecting()
Gibt
true zurück, wenn die Verbindung getrennt wurde |
void |
login(ClientCredentials clientCredentials)
Die Methode erstellt eine logische Verbindung zum Datenverteiler, d. h. die Authentifizierung der Applikation und das Einstellen der
Kommunikationsparameter wird durchgeführt, damit der Austausch von Daten sicher durchgeführt werden kann.
|
void |
sendData(SendDataObject dataToSend)
Versendet ein Applikationsdatentelegramm an den Datenverteiler.
|
void |
sendReceiveSubscription(ReceiveSubscriptionInfo subscription)
Es wird ein
Empfangsanmeldungstelegramm erstellt und zum
Datenverteiler gesendet. |
void |
sendReceiveUnsubscription(BaseSubscriptionInfo unsubscription)
Es wird ein
Empfangsabmeldungstelegramm erstellt und
zum Datenverteiler gesendet. |
void |
sendSendSubscription(SendSubscriptionInfo subscription)
Es wird ein
Sendeanmeldetelegramm erstellt und zum
Datenverteiler gesendet. |
void |
sendSendUnsubscription(BaseSubscriptionInfo unsubscription)
Es wird ein
Sendeabmeldetelegramm erstellt und zum
Datenverteiler gesendet. |
void |
setCloseHandler(ApplicationCloseActionHandler closer)
Setzt den
ApplicationCloseActionHandler dieser Subkomponente. |
void |
setConnectionListener(DavConnectionListener connectionListener)
Meldet einen Beobachter für Zustandsänderungen der Datenverteilerverbindung an.
|
void |
setReadyForConfigDependantData()
Diese Methode wird vom Anmeldungsmanager aufgerufen, nachdem die Anmeldungen erfolgreich abgeschlossen sind, die eine gerichtete Kommunikation
mit der Konfiguration gewährleisten.
|
void |
terminate(boolean error,
java.lang.String message)
Die bestehende Verbindung zum Datenverteiler wird terminiert, und der Kommunikationskanal wird geschlossen.
|
void |
terminate(boolean error,
java.lang.String message,
DataTelegram terminationTelegram) |
void |
update(DataTelegram telegram)
Wird von der unteren Kommunikationsschicht nach Empfang eines Telegramms aufgerufen.
|
void |
updateConfigData(SendDataObject receivedData)
Wenn ein neues Konfigurationstelegramm angekommen ist, wird es an die Verwaltung weitergeleitet.
|
public ClientHighLevelCommunication(ClientDavParameters clientDavParameters, ApplicationCloseActionHandler closer) throws CommunicationError, ConnectionException
ClientDavParameters
enthält
die Adresse und Subadresse des Datenverteilers, spezifiziert das zu verwendende Protokoll durch dessen Namen. ApplicationCloseActionHandler
bestimmt wie die Applikationsfunktion auf einen Kommunikationsfehler reagieren soll.
ClientConnectionProperties
werden erzeugt, die die Eigenschaften dieser Verbindung verkörpern. Sie spezifizieren insbesondere den
AuthentificationProcess
, das für die Passwortverschlüsselung zuständige
Verfahren. Weiter enthalten sie die PID der Konfiguration.
Ein Systemtelegramm ProtocolVersionRequest
wird gebildet und zum Datenverteiler
gesendet. Es enthält Angaben über die unterstützte Protokollversion. Auf die Antwort wird eine festgelegte Zeit gewartet (maximale Wartezeit
auf synchrone Antworten). Wenn die Antwort nicht innerhalb diese Zeit an-gekommen ist oder die Protokollversion vom Datenverteiler nicht
unterstützt wird, dann wird eine CommunicationError-Ausnahme erzeugt.
clientDavParameters
- Parameterklasse für die Datenverteiler-Applikationsfunktionencloser
- bestimmt, wie die Applikationsfunktionen auf einen Kommunikationsfehler reagieren sollCommunicationError
- Wenn die Verhandlung der Protokollversion nicht durchgeführt wurde oder die Protokollversion nicht unterstützt
wird.ConnectionException
- Wenn die Verbindung über die Telegrammverwaltung fehlschlägt.public ClientHighLevelCommunication()
public boolean isDisconnecting()
true
zurück, wenn die Verbindung getrennt wurdetrue
, wenn die Verbindung getrennt wurde, sonst false
public EncryptionStatus getEncryptionStatus()
public AuthenticationStatus getAuthenticationStatus()
public final void completeInitialisation(ConfigurationManager configurationManager, CacheManager cacheManager, SubscriptionManager subscriptionManager)
configurationManager
- der KonfigurationsmanagercacheManager
- der Cache-ManagersubscriptionManager
- der Anmeldungsmanagerpublic long getApplicationId()
public final long getDataTransmitterId()
public final long getConfigurationId()
public final long getUserId()
public final void setReadyForConfigDependantData()
public final void setCloseHandler(ApplicationCloseActionHandler closer)
ApplicationCloseActionHandler
dieser Subkomponente. Dieser bestimmt wie die Applikationsfunktion auf einen
Kommunikationsfehler reagieren soll.closer
- ApplicationCloseActionHandler
public final void login(ClientCredentials clientCredentials) throws InconsistentLoginException, CommunicationError
AuthentificationTextRequest
-Telegramm mit der Konfigurations-PID wird über die
Telegrammverwaltung
zum Datenverteiler gesendet, um einen Schlüssel für die Authentifizierung anzufordern. Auf die Antwort AuthentificationTextAnswer
wird eine gewisse Zeit gewartet (maximale Wartezeit auf synchrone Antworten). Mit dem vom Datenverteiler erhaltenen
Schlüssel wird das Benutzerpasswort durch den AuthentificationProcess
verschlüsselt und als
AuthentificationRequest
zum Datenverteiler gesendet. Auch hier wird eine gewisse Zeit auf die Antwort AuthentificationAnswer
gewartet (maximale Wartezeit auf synchrone Antworten). Wenn die
Authentifizierung erfolgreich ist, werden die Ids der Applikation, des Datenverteilers, der Konfiguration und des Benutzers übertragen und von
dieser Subkomponente festgehalten. Wird als Id der Konfiguration -1
zurückgegeben, so war die spezifizierte PID dem System nicht
bekannt. Sonst werden die Keep-alive-Parameter und die Durchsatzprüfungsparameter mit dem Datenverteiler verhandelt. Ein ComParametersRequest
wird zum Datenverteiler gesendet. Auch hier wird auf die Antwort ComParametersAnswer
eine gewisse Zeit gewartet
(maximale Wartezeit auf synchrone Antworten).clientCredentials
- Passwort oder Login-TokenInconsistentLoginException
- Wenn die Authentifizierung nicht erfolgreich abgeschlossen werden konnte.CommunicationError
- Wenn eine Antwort nicht innerhalb einer parametrierten Zeit vom Datenverteiler
beantwortet wird oder wenn als Id der Konfiguration eine -1
ermittelt wird.public void sendReceiveSubscription(ReceiveSubscriptionInfo subscription)
Empfangsanmeldungstelegramm
erstellt und zum
Datenverteiler gesendet.subscription
- die Empfangsanmeldeinformationenpublic final void sendReceiveUnsubscription(BaseSubscriptionInfo unsubscription)
Empfangsabmeldungstelegramm
erstellt und
zum Datenverteiler gesendet.unsubscription
- die Empfangsabmeldeinformationenpublic void sendSendSubscription(SendSubscriptionInfo subscription)
Sendeanmeldetelegramm
erstellt und zum
Datenverteiler gesendet.subscription
- die Sendeanmeldeinformationenpublic final void sendSendUnsubscription(BaseSubscriptionInfo unsubscription)
Sendeabmeldetelegramm
erstellt und zum
Datenverteiler gesendet.unsubscription
- die Sendeabmeldeinformationenpublic final void sendData(SendDataObject dataToSend)
dataToSend
- die zu sendenden Daten als Bytefeld vorbereitetpublic final void terminate(boolean error, java.lang.String message)
error
gesetzt ist, wird die close-Methode vom ApplicationCloseActionHandler
aufgerufen.error
- Ist true
, wenn die Verbindung im Fehlerfall abgebrochen werden soll, ohne die noch gepufferten Telegramme zu versenden;
false
, wenn versucht werden soll alle gepufferten Telegramme zu versenden.message
- Fehlermeldung, die die Fehlersituation näher beschreibt.public final void terminate(boolean error, java.lang.String message, DataTelegram terminationTelegram)
public void disconnected(boolean error, java.lang.String message)
HighLevelCommunicationCallbackInterface
disconnected
in interface HighLevelCommunicationCallbackInterface
error
- true
signalisiert eine Fehlersituation der unteren Kommunikationsschicht.message
- Fehlermeldung, die die Fehlersituation näher beschreibt.public final void update(DataTelegram telegram) throws java.lang.InterruptedException
LowLevelCommunication
aufgerufen, wenn ein neues Telegramm angekommen ist. Sie reagiert nur auf die
Telegramme, die für die Applikation von Interesse sind.
Neu ankommende Telegramme werden je nach Typ unterschiedlich weiterverarbeitet:
Wenn das Telegramm vom Typ AuthentificationTextAnswer
, AuthentificationAnswer
, ComParametersAnswer
, ProtocolVersionAnswer
oder TelegramTimeAnswer
ist, wird es in eine Liste eingefügt und eine Broadcast-Nachricht an alle wartenden
Methoden gesendet. Diese überprüfen ob die Nachricht für sie relevant ist. In diesem Falle wird sie aus der Liste entfernt und bearbeitet.
Wenn das Telegramm vom Typ TelegramTimeRequest
ist, wird anhand der übergebenen
gemessene Zeit ein TelegramTimeAnswer
gebildet und zum Datenverteiler gesendet.
Wenn das Telegramm vom Typ RequestSenderDataTelegram
ist, wird die Methode
notifySenderApplication
des Anmeldungsmanagers aufgerufen, um die Applikation zu benachrichtigen.
Wenn das Telegramm vom Typ ApplicationDataTelegram
ist, wird zunächst überprüft, ob ein zerstückeltes Telegramm vorliegt. Ist dies der Fall, dann wird es in eine Liste
eingefügt und überprüft ob alle Teiltelegramme vorhanden sind. Sind alle vorhanden, wird aus den Telegrammen ein SendDataObject
erzeugt, das weiterverarbeitet werden kann. Wenn das Telegramm nicht zerstückelt ist, wird es sofort in ein SendDataObject
zur
Weiterbearbeitung umgewandelt. Wenn dieses erfolgreich erzeugt wurde, wird anhand seiner Basisanmeldeinformation überprüft, ob es eine Antwort
einer Konfigurationsanfrage ist. Ist dies der Fall, so wird das Telegramm der
update
-Methode des Konfigurations-Managers übergeben, wenn nicht, handelt es sich um ein Online-Telegramm und es wird an die update
-Methode des Cache-Managers übergeben.
Wenn das Telegramm vom Typ ClosingTelegram
oder TerminateOrderTelegram
ist, wird die Methode terminate(boolean, java.lang.String)
aufgerufen.
Jeder andere Telegrammtyp wird ignoriert.
update
in interface HighLevelCommunicationCallbackInterface
telegram
- Das empfangene Telegrammjava.lang.InterruptedException
- Wenn der Thread während eines blockierenden Aufrufs unterbrochen wurdepublic final void updateConfigData(SendDataObject receivedData)
HighLevelCommunicationCallbackInterface
updateConfigData
in interface HighLevelCommunicationCallbackInterface
receivedData
- das Konfigurationstelegrammpublic final ClientConnectionProperties getConnectionProperties()
public final long getTelegramTime(long maxWaitingTime) throws CommunicationError
maxWaitingTime
- Zeit in Millisekunden, die maximal auf eine Antwort gewartet wird.-1
falls
innerhalb der angegebenen Timeout-Zeit keine Antwort empfangen wurde.CommunicationError
- Falls die Verbindung zum Datenverteiler gestört ist.public void setConnectionListener(DavConnectionListener connectionListener)
connectionListener
- Beobachter für Zustandsänderungen der Datenverteilerverbindungpublic java.util.List<DataTelegram> getSyncSystemTelegramList()