public final class ApplicationStatusUpdater
extends java.lang.Thread
Dieser Thread verschickt den Status(angemeldete Applikationen, Telegrammlaufzeiten, durch Applikationen angemeldete Datenidentifikationen) aller angemeldeten Applikationen.
Modifier and Type | Class and Description |
---|---|
private static class |
ApplicationStatusUpdater.ApplicationConnection |
private class |
ApplicationStatusUpdater.SourceApplicationUpdater |
Modifier and Type | Field and Description |
---|---|
private java.util.List<ApplicationStatusUpdater.ApplicationConnection> |
_application
Enthält alle Applikationen, die an/ab gemeldet werden sollen.
|
private java.lang.Object |
_applicationConnections |
private DataDescription |
_applicationDataDescriptionDD
Die DataDescription, die zum Versandt von Anmeldungen einer Applikation benutzt wird.
|
private ApplicationStatusUpdater.SourceApplicationUpdater |
_applicationRuntime
Zum verschicken aller Telegrammlaufzeiten der angemeldeten Applikationen
|
private DataDescription |
_applicationRuntimeDataDescription
DataDescription, mit der eine Quelle zum verschicken der Telegrammlaufzeiten der angemeldeten Applikationen.
|
private ApplicationStatusUpdater.SourceApplicationUpdater |
_applicationUpdater
Zum verschicken aller angemeldeten Applikationen
|
private DataDescription |
_applicationUpdaterDataDescription
DataDescription, mit der eine Quelle zum verschicken aller angemeldeten Applikationen angemeldet wird.
|
private ClientDavInterface |
_connection |
private HighLevelConnectionsManagerInterface |
_connectionsManager |
private DataModel |
_dataModel |
private SystemObject |
_davObject |
private static Debug |
_debug |
private static java.lang.String |
_pidAngemeldeteApplikationen
ATG, die benötigt wird um einen Datensatz zu verschicken, der alle angemeldeten Applikationen enthält.
|
private static java.lang.String |
_pidAngemeldeteDatenidentifikationen
ATG, die benötigt wird um einen Datensatz zu verschicken, der die angemeldeten Daten aller angemeldeten Applikationen enthält.
|
private static java.lang.String |
_pidTelegrammLaufzeiten
ATG, die benötigt wird um einen Datensatz zu verschicken, der die Telegrammlaufzeiten aller angemeldeten Applikationen enthält.
|
private java.util.Map<T_A_HighLevelCommunication,ApplicationStatusUpdater.SourceApplicationUpdater> |
_subcribedDataIdentifications
Key = Applikation, die bereits Daten angemeldet hat; Value = ClientSenderInterface(SourceApplicationUpdater).
|
private java.util.Map<ApplicationCommunicationInterface,java.util.TimerTask> |
_threadsForDataIdentificationUpdates
Wird für eine Applikation eine neue Datenidentifikation angemeldet, so wird dies über einen TimerTask publiziert.
|
private java.util.Timer |
_timer
Verschickt zyklisch alle angemeldeten Applikationen und deren Telegrammlaufzeiten.
|
Constructor and Description |
---|
ApplicationStatusUpdater(HighLevelConnectionsManagerInterface connectionsManager,
ClientDavInterface connection) |
Modifier and Type | Method and Description |
---|---|
void |
applicationAdded(T_A_HighLevelCommunication applicationConnection)
Fügt eine neue Applikation den Datenstrukturen hinzu und der Thread, der Aktualisierungsdatensätze verschickt, wird aufgeweckt.
|
void |
applicationRemoved(T_A_HighLevelCommunication applicationConnection)
Speichert die entfernte Applikation und weckt den wartende Thread auf, der daraufhin eine Datensatz mit den aktuell angemeldeten Applikationen verschickt.
|
void |
applicationSubscribedNewConnection(ApplicationCommunicationInterface application)
Diese Methode wird aufgerufen, wenn eine Applikation eine neue Datenidentifikation anmeldet.
|
void |
applicationUnsubscribeConnection(ApplicationCommunicationInterface application)
Diese Methode wird aufgerufen, wenn eine Applikation eine Datenidentifikation abmeldet.
|
private void |
createPeriodicUpdateTask()
Erstellt einen TimerTask, der alls 60 Sekunden alle angemeldeten Applikationen und deren Telegrammlaufzeiten verschickt (wenn ein Empfänger angemeldet ist).
|
private void |
inscribeDataDescription(Data data,
BaseSubscriptionInfo baseSubscriptionInfo,
java.lang.String role)
Schreibt in den übergebenen Datensatz(atl.angemeldeteDatenidentifikation) alle Daten benötigten Daten.
|
private boolean |
isNotSpecialTreatedApplicationObject(ServerHighLevelCommunication unknownObject)
Prüft, ob das übergebene Objekt gleich dem Objekt ist, das die Applikation des DaV darstellt, die sich selbst beim DaV anmeldet oder aber die Konfiguration.
|
private void |
publishConnectionChanged(ApplicationCommunicationInterface application)
Wird aufgerufen, wenn eine Applikation einen Datenidentifikation an/abmeldet.
|
void |
run() |
private void |
sendApplicationTelegramRuntimeUpdate()
Verschickt ein Telegramm, das für alle angemeldeten Applikationen die Telegrammlaufzeit vom DaV zur Applikation enthält.
|
private void |
sendApplicationUpdate()
Es wird ein Datensatz verschickt, der alle Applikationen enthält, die gerade am DaV angemeldet sind.
|
private void |
sendDataAsSource(Data data,
DataDescription applicationRuntimeDataDescription) |
private void |
sendDataDescriptionUpdate(ApplicationCommunicationInterface application)
Verschickt einen Datensatz mit der ATG “atg.angemeldeteDatenidentifikationen”.
|
private void |
subscribeDataDescriptionSource(T_A_HighLevelCommunication newApplication)
Meldet für eine neue Applikation eine Quelle an, die Datensätze vom mit der ATG “atg.angemeldeteDatenidentifikationen” verschickt.
|
private void |
unsubscribeDataDescriptionSource(T_A_HighLevelCommunication removedApplication)
Meldet die Datensätze der ATG “atg.angemeldeteDatenidentifikationen” wieder ab und entfernt die Objekte aus allen Datenstrukturen.
|
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
private static final java.lang.String _pidAngemeldeteApplikationen
ATG, die benötigt wird um einen Datensatz zu verschicken, der alle angemeldeten Applikationen enthält. Ist diese ATG nicht vorhanden, so wird der Datenverteiler gestartet ohne diese Funktionalität zur Verfügung zu stellen.
private static final java.lang.String _pidAngemeldeteDatenidentifikationen
ATG, die benötigt wird um einen Datensatz zu verschicken, der die angemeldeten Daten aller angemeldeten Applikationen enthält. Ist diese ATG nicht vorhanden, so wird der Datenverteiler gestartet ohne diese Funktionalität zur Verfügung zu stellen.
private static final java.lang.String _pidTelegrammLaufzeiten
ATG, die benötigt wird um einen Datensatz zu verschicken, der die Telegrammlaufzeiten aller angemeldeten Applikationen enthält. Ist diese ATG nicht vorhanden, so wird der Datenverteiler gestartet ohne diese Funktionalität zur Verfügung zu stellen.
private static final Debug _debug
private final java.util.List<ApplicationStatusUpdater.ApplicationConnection> _application
Enthält alle Applikationen, die an/ab gemeldet werden sollen. Die Elemente werden nach Fifo bearbeitet.
private final SystemObject _davObject
private final ApplicationStatusUpdater.SourceApplicationUpdater _applicationUpdater
Zum verschicken aller angemeldeten Applikationen
private final DataDescription _applicationUpdaterDataDescription
DataDescription, mit der eine Quelle zum verschicken aller angemeldeten Applikationen angemeldet wird.
private final ApplicationStatusUpdater.SourceApplicationUpdater _applicationRuntime
Zum verschicken aller Telegrammlaufzeiten der angemeldeten Applikationen
private final DataDescription _applicationRuntimeDataDescription
DataDescription, mit der eine Quelle zum verschicken der Telegrammlaufzeiten der angemeldeten Applikationen.
private final DataDescription _applicationDataDescriptionDD
Die DataDescription, die zum Versandt von Anmeldungen einer Applikation benutzt wird.
private final java.util.Timer _timer
Verschickt zyklisch alle angemeldeten Applikationen und deren Telegrammlaufzeiten.
private final java.util.Map<ApplicationCommunicationInterface,java.util.TimerTask> _threadsForDataIdentificationUpdates
Wird für eine Applikation eine neue Datenidentifikation angemeldet, so wird dies über einen TimerTask publiziert. Der TimerTask, der diese Aufgabe übernimmt, wird hier gespeichert. Der TimerTask kann jederzeit unterbrochen werden und durch einen neuen TimerTask ersetzt werden. Auch wenn der TimerTask bereits ausgeführt wurde befindet er sich weiterhin in dieser Map und kann durch einen neuen TimerTask ersetzt werden.
Als Schlüssel dient die HighLevelCommu, dies entspricht der Applikation, deren Anmeldungen verschickt werden sollen. Als Value wird ein TimerTask zurückgegeben, der alle angemeldeten Datenidentifikationen der Applikation verschickt, sobald der Thread ausgeführt wird. Der Thread kann bereits ausgeführt worden sein oder aber noch ausgeführt werden (oder befindet sich in Bearbeitung). Wurde noch kein TimerTask angelegt, so wird null
zurückgegeben.
private final java.util.Map<T_A_HighLevelCommunication,ApplicationStatusUpdater.SourceApplicationUpdater> _subcribedDataIdentifications
Key = Applikation, die bereits Daten angemeldet hat; Value = ClientSenderInterface(SourceApplicationUpdater). Damit kann später die Verbindung wieder abgemeldet werden und es wird ein mehrfaches anmelden verhindert. Gleichzeit kann das Objekt befragt werden, ob überhaupt gesendet werden soll.
private final java.lang.Object _applicationConnections
private final DataModel _dataModel
private final HighLevelConnectionsManagerInterface _connectionsManager
private final ClientDavInterface _connection
public ApplicationStatusUpdater(HighLevelConnectionsManagerInterface connectionsManager, ClientDavInterface connection)
private boolean isNotSpecialTreatedApplicationObject(ServerHighLevelCommunication unknownObject)
Prüft, ob das übergebene Objekt gleich dem Objekt ist, das die Applikation des DaV darstellt, die sich selbst beim DaV anmeldet oder aber die Konfiguration.
Wurde bisher noch kein DaV-Objekt gesucht/gefunden und das übergebene Objekt ist das DaV-Objekt, so wird das Objekt einen internen Variablen zugewiesen und true
zurück gegeben.
unknownObject
- Objekt, das vielleicht das DaV-Objekt darstellen könnte.private void sendApplicationUpdate()
Es wird ein Datensatz verschickt, der alle Applikationen enthält, die gerade am DaV angemeldet sind.
private void sendApplicationTelegramRuntimeUpdate()
Verschickt ein Telegramm, das für alle angemeldeten Applikationen die Telegrammlaufzeit vom DaV zur Applikation enthält.
private void sendDataAsSource(Data data, DataDescription applicationRuntimeDataDescription)
private void sendDataDescriptionUpdate(ApplicationCommunicationInterface application)
Verschickt einen Datensatz mit der ATG “atg.angemeldeteDatenidentifikationen”.
application
- Applikation, deren angemeldete Datenidentifiaktionen propagiert werden sollen.private void inscribeDataDescription(Data data, BaseSubscriptionInfo baseSubscriptionInfo, java.lang.String role)
Schreibt in den übergebenen Datensatz(atl.angemeldeteDatenidentifikation) alle Daten benötigten Daten.
data
- Datensatz (atl.angemeldeteDatenidentifikation)baseSubscriptionInfo
- Enthält das SystemObject(Id), die verwendete ATGV (Id) und die Simulationsvarianterole
- Verwendete Rolle, siehe auch att.rolleAnmeldung. Zulässige Werte: Quelle, Sender, Senke, Empfängerprivate void createPeriodicUpdateTask()
Erstellt einen TimerTask, der alls 60 Sekunden alle angemeldeten Applikationen und deren Telegrammlaufzeiten verschickt (wenn ein Empfänger angemeldet ist).
private void subscribeDataDescriptionSource(T_A_HighLevelCommunication newApplication)
Meldet für eine neue Applikation eine Quelle an, die Datensätze vom mit der ATG “atg.angemeldeteDatenidentifikationen” verschickt.
Gleichzeitig wird das Objekt in alle benötigten Datenstrukturen eingetragen.
Hat bereits eine Anmeldung stattgefunden, wird nichts gemacht (zum Beispiel, wenn weiter DataDescription für eine Applikation angemeldet werden).
newApplication
- enthält alle Daten zum anmelden.private void unsubscribeDataDescriptionSource(T_A_HighLevelCommunication removedApplication)
Meldet die Datensätze der ATG “atg.angemeldeteDatenidentifikationen” wieder ab und entfernt die Objekte aus allen Datenstrukturen. Wurden die Daten bereits abgemeldet wird nichts gemacht.
Eventuell angemeldete TimerTasks werden unterbrochen und entfernt.
removedApplication
- Objekt, deren Quellenanmeldung zurückgenommen werden soll.public void run()
run
in interface java.lang.Runnable
run
in class java.lang.Thread
public void applicationAdded(T_A_HighLevelCommunication applicationConnection)
Fügt eine neue Applikation den Datenstrukturen hinzu und der Thread, der Aktualisierungsdatensätze verschickt, wird aufgeweckt.
applicationConnection
- Neue Applikationpublic void applicationRemoved(T_A_HighLevelCommunication applicationConnection)
Speichert die entfernte Applikation und weckt den wartende Thread auf, der daraufhin eine Datensatz mit den aktuell angemeldeten Applikationen verschickt.
applicationConnection
- Applikation, die entfernt wurdepublic void applicationSubscribedNewConnection(ApplicationCommunicationInterface application)
Diese Methode wird aufgerufen, wenn eine Applikation eine neue Datenidentifikation anmeldet.
Für diese Applikation wird ein Datensatz verschickt, der alle angemeldeten Datenidentifikationen enthält.
application
- Applikation, die neue Daten anmeldet.public void applicationUnsubscribeConnection(ApplicationCommunicationInterface application)
Diese Methode wird aufgerufen, wenn eine Applikation eine Datenidentifikation abmeldet.
Für diese Applikation wird ein Datensatz verschickt, der alle angemeldeten Datenidentifikationen enthält.
application
- Applikation, die eine Datenidentifikation abmeldet.private void publishConnectionChanged(ApplicationCommunicationInterface application)
Wird aufgerufen, wenn eine Applikation einen Datenidentifikation an/abmeldet. Es wird ein TimerTask angelegt, der nach einer gewissen Zeit alle angemeldeten Datenidentifikationen der übergebene Applikation publiziert. Gibt es bereits einen TimerTask, der diese Aufgabe übernehmen möchte, so wird dieser gestoppt und durch einen neuen TimerTask ersetzt, der wieder eine gewisse Zeit wartet.
Dadruch wird verhindert, dass sehr viele Anmeldungen eine Flut von Update-Telegrammen auslöst. Jede neue Anmeldung verzögert das Update-Telegramm, erst wenn alle Anmeldungen durchgeführt wurden, wird das Telegramm verschickt.
application
- Applikation, die neue Daten an oder abmeldet.