de.bsvrz.dav.dav.main
Class ConnectionsManager.ApplicationStatusUpdater

java.lang.Object
  extended by java.lang.Thread
      extended by de.bsvrz.dav.dav.main.ConnectionsManager.ApplicationStatusUpdater
All Implemented Interfaces:
Runnable
Enclosing class:
ConnectionsManager

public final class ConnectionsManager.ApplicationStatusUpdater
extends Thread

Dieser Thread verschickt den Status(angemeldete Appliktionen, Telegrammlaufzeiten, durch Applikationen angemeldete Datenidentifikationen) aller angemeldeten Applikationen.


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private  List<ConnectionsManager.ApplicationConnection> _application
          Enthält alle Applikationen, die an/ab gemeldet werden sollen.
private  DataDescription _applicationDataDescriptionDD
          Die DataDescription, die zum Versandt von Anmeldungen einer Applikation benutzt wird.
private  ConnectionsManager.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  ConnectionsManager.SourceApplicationUpdater _applicationUpdater
          Zum verschicken aller angemeldeten Applikationen
private  DataDescription _applicationUpdaterDataDescription
          DataDescription, mit der eine Quelle zum verschicken aller angemeldeten Applikationen angemeldet wird.
private  SystemObject _davObject
           
private  Map<T_A_HighLevelCommunication,ConnectionsManager.SourceApplicationUpdater> _subcribedDataIdentifications
          Key = Applikation, die bereits Daten angemeldet hat; Value = ClientSenderInterface(SourceApplicationUpdater).
private  Map<T_A_HighLevelCommunication,TimerTask> _threadsForDataIdentificationUpdates
          Wird für eine Applikation eine neue Datenidentifikation angemeldet, so wird dies über einen TimerTask publiziert.
private  Timer _timer
          Verschickt zyklisch alle angemeldeten Applikationen und deren Telegrammlaufzeiten.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
ConnectionsManager.ApplicationStatusUpdater()
           
 
Method Summary
 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(T_A_HighLevelCommunication application)
          Diese Methode wird aufgerufen, wenn eine Applikation eine neue Datenidentifikation anmeldet.
 void applicationUnsubscribeConnection(T_A_HighLevelCommunication 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, String role)
          Schreibt in den übergebenen Datensatz(atl.angemeldeteDatenidentifikation) alle Daten benötigten Daten.
private  boolean isSpecialTreatedApplicationObject(T_A_HighLevelCommunication 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(T_A_HighLevelCommunication 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 sendDataDescriptionUpdate(T_A_HighLevelCommunication 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.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, 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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_application

private final List<ConnectionsManager.ApplicationConnection> _application
Enthält alle Applikationen, die an/ab gemeldet werden sollen. Die Elemente werden nach Fifo bearbeitet.


_davObject

private final SystemObject _davObject

_applicationUpdater

private final ConnectionsManager.SourceApplicationUpdater _applicationUpdater
Zum verschicken aller angemeldeten Applikationen


_applicationUpdaterDataDescription

private final DataDescription _applicationUpdaterDataDescription
DataDescription, mit der eine Quelle zum verschicken aller angemeldeten Applikationen angemeldet wird.


_applicationRuntime

private final ConnectionsManager.SourceApplicationUpdater _applicationRuntime
Zum verschicken aller Telegrammlaufzeiten der angemeldeten Applikationen


_applicationRuntimeDataDescription

private final DataDescription _applicationRuntimeDataDescription
DataDescription, mit der eine Quelle zum verschicken der Telegrammlaufzeiten der angemeldeten Applikationen.


_applicationDataDescriptionDD

private final DataDescription _applicationDataDescriptionDD
Die DataDescription, die zum Versandt von Anmeldungen einer Applikation benutzt wird.


_timer

private final Timer _timer
Verschickt zyklisch alle angemeldeten Applikationen und deren Telegrammlaufzeiten.


_threadsForDataIdentificationUpdates

private final Map<T_A_HighLevelCommunication,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.


_subcribedDataIdentifications

private final Map<T_A_HighLevelCommunication,ConnectionsManager.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.

Constructor Detail

ConnectionsManager.ApplicationStatusUpdater

public ConnectionsManager.ApplicationStatusUpdater()
Method Detail

isSpecialTreatedApplicationObject

private boolean isSpecialTreatedApplicationObject(T_A_HighLevelCommunication 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.

Parameters:
unknownObject - Objekt, das vielleicht das DaV-Objekt darstellen könnte.
Returns:
true = Es handelt sich um das DaV-Objekt oder das Konfigurationsobjekt -> Das Objekt muss ausgeblendet werden; false = sonst

sendApplicationUpdate

private void sendApplicationUpdate()
Es wird ein Datensatz verschickt, der alle Applikationen enthält, die gerade am DaV angemeldet sind.


sendApplicationTelegramRuntimeUpdate

private void sendApplicationTelegramRuntimeUpdate()
Verschickt ein Telegramm, das für alle angemeldeten Applikationen die Telegrammlaufzeit vom DaV zur Applikation enthält.


sendDataDescriptionUpdate

private void sendDataDescriptionUpdate(T_A_HighLevelCommunication application)
Verschickt einen Datensatz mit der ATG "atg.angemeldeteDatenidentifikationen".

Parameters:
application - Applikation, deren angemeldete Datenidentifiaktionen propagiert werden sollen.

inscribeDataDescription

private void inscribeDataDescription(Data data,
                                     BaseSubscriptionInfo baseSubscriptionInfo,
                                     String role)
Schreibt in den übergebenen Datensatz(atl.angemeldeteDatenidentifikation) alle Daten benötigten Daten.

Parameters:
data - Datensatz (atl.angemeldeteDatenidentifikation)
baseSubscriptionInfo - Enthält das SystemObject(Id), die verwendete ATGV (Id) und die Simulationsvariante
role - Verwendete Rolle, siehe auch att.rolleAnmeldung. Zulässige Werte: Quelle, Sender, Senke, Empfänger

createPeriodicUpdateTask

private void createPeriodicUpdateTask()
Erstellt einen TimerTask, der alls 60 Sekunden alle angemeldeten Applikationen und deren Telegrammlaufzeiten verschickt (wenn ein Empfänger angemeldet ist).


subscribeDataDescriptionSource

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

Parameters:
newApplication - enthält alle Daten zum anmelden.

unsubscribeDataDescriptionSource

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.

Parameters:
removedApplication - Objekt, deren Quellenanmeldung zurückgenommen werden soll.

run

public void run()
Specified by:
run in interface Runnable
Overrides:
run in class Thread

applicationAdded

public void applicationAdded(T_A_HighLevelCommunication applicationConnection)
Fügt eine neue Applikation den Datenstrukturen hinzu und der Thread, der Aktualisierungsdatensätze verschickt, wird aufgeweckt.

Parameters:
applicationConnection - Neue Applikation

applicationRemoved

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

Parameters:
applicationConnection - Applikation, die entfernt wurde

applicationSubscribedNewConnection

public void applicationSubscribedNewConnection(T_A_HighLevelCommunication 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.

Parameters:
application - Applikation, die neue Daten anmeldet.

applicationUnsubscribeConnection

public void applicationUnsubscribeConnection(T_A_HighLevelCommunication 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.

Parameters:
application - Applikation, die eine Datenidentifikation abmeldet.

publishConnectionChanged

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

Parameters:
application - Applikation, die neue Daten an oder abmeldet.