Package de.bsvrz.dav.dav.subscriptions
Class SubscriptionInfo
java.lang.Object
de.bsvrz.dav.dav.subscriptions.SubscriptionInfo
- All Implemented Interfaces:
Closeable
,AutoCloseable
Diese Klasse kapselt eine Anmeldungsinformation zu einer Objekt/Attributgruppe/Aspekt/Simulationsvariante-Kombination. Enthalten sind die
eigentlichen Anmeldungen von Applikationen und Datenverteilern auf diese BaseSubscriptionInfo. Diese Klasse kümmert sich darum, die Anmeldungen zu
verwalten und je nach Verfügbarkeit von Sendern, Empfängern, Quellen und Senken und je nach vorhandenen Rechten den einzelnen Verbindungen per
Sendesteuerung oder leeren Datensätzen den Zustand der Anmeldung zu übermitteln. Zusätzlich übernimmt diese Klasse das Verteilen von Datensätzen an
interessierte und gültige Empfangsanmeldungen.
-
Constructor Summary
ConstructorsConstructorDescriptionSubscriptionInfo
(SubscriptionsManager subscriptionsManager, de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo) Erstellt eine neue SubscriptionInfo -
Method Summary
Modifier and TypeMethodDescriptionvoid
addReceivingSubscription
(ReceivingSubscription receivingSubscription) Fügt eine empfangende Anmeldung hinzuvoid
addSendingSubscription
(SendingSubscription sendingSubscription) Fügt eine sendende Anmeldung hinzuvoid
close()
Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden.void
distributeTelegram
(de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram applicationDataTelegram, boolean toCentralDistributor, CommunicationInterface communication, long applicationId) Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfängervoid
distributeTelegrams
(List<de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication, long applicationId) Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfängerde.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo
Gibt das BaseSubscriptionInfo zurücklong
getCurrentDataIndex
(long runningNumber) Gibt den zuletzt berechneten Datenindex zurücklong
getNextDataIndex
(long runningNumber) Berechnet den nächsten Datenindex und gibt diesen zurückErstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon bestehtErstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon bestehtGibt alle Empfangs-Anmeldungen zurückgetReceivingSubscriptions
(CommunicationInterface communicationInterface) Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurückGibt alle sendenden Anmeldungen zurückgetSendingSubscriptions
(CommunicationInterface communicationInterface) Gibt alle Sende-Anmeldungen zu einer Verbindung zurückGibt alle gültigen empfangenden Anmeldungen zurückGibt alle gültigen sendenden Anmeldungen zurückvoid
handleUserRightsChanged
(long userId) Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültigboolean
hasDrain()
Gibttrue
zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)boolean
Gibttrue
zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)boolean
Gibttrue
zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung istboolean
isEmpty()
Gibttrue
zurück, wenn es keine Anmeldungen gibtboolean
isValidSender
(CommunicationInterface communication) Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)void
open()
Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.void
removeReceivingSubscription
(ReceivingSubscription receivingSubscription) Entfernt eine empfangende AnmeldungremoveReceivingSubscriptions
(CommunicationInterface communication) Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sindvoid
removeSendingSubscription
(SendingSubscription sendingSubscription) Entfernt eine sendende AnmeldungremoveSendingSubscriptions
(CommunicationInterface communication) Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sindbyte[]
Serialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.void
setMultiRemoteLockActive
(boolean multiRemoteLockActive) Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt habenvoid
setRemoteDrainSubscriptionStatus
(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId) Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldungvoid
setRemoteSourceSubscriptionStatus
(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId) Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden AnmeldungtoString()
void
updateBestWay
(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection) Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibtvoid
updateOrCreateRemoteReceiverSubscription
(TransmitterCommunicationInterface communication, Collection<Long> ids) Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Empfänger (dieser Datenverteiler ist dann typischerweise potentiell Quell-Datenverteiler bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler).void
updateOrCreateRemoteSenderSubscription
(TransmitterCommunicationInterface communication, Collection<Long> ids) Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Sender (dieser Datenverteiler ist dann typischerweise potentiell eine Senke bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler).void
updatePendingSubscriptionDataIndex
(CommunicationInterface communication, long dataIndex) void
Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren
-
Constructor Details
-
SubscriptionInfo
public SubscriptionInfo(SubscriptionsManager subscriptionsManager, de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo baseSubscriptionInfo) Erstellt eine neue SubscriptionInfo- Parameters:
subscriptionsManager
- AnmeldungsverwaltungbaseSubscriptionInfo
- Datenidentifikation
-
-
Method Details
-
addSendingSubscription
Fügt eine sendende Anmeldung hinzu- Parameters:
sendingSubscription
- neue sendende Anmeldung
-
addReceivingSubscription
Fügt eine empfangende Anmeldung hinzu- Parameters:
receivingSubscription
- neue empfangende Anmeldung
-
removeReceivingSubscription
Entfernt eine empfangende Anmeldung- Parameters:
receivingSubscription
- empfangende Anmeldung
-
removeSendingSubscription
Entfernt eine sendende Anmeldung- Parameters:
sendingSubscription
- sendende Anmeldung
-
removeSendingSubscriptions
Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sind- Parameters:
communication
- Verbindung- Returns:
- Liste mit entfernten Sendern und Quellen
-
removeReceivingSubscriptions
public List<ReceivingSubscription> removeReceivingSubscriptions(CommunicationInterface communication) Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sind- Parameters:
communication
- Verbindung- Returns:
- Liste mit entfernten Empfängern und Senken
-
getValidSenderSubscriptions
Gibt alle gültigen sendenden Anmeldungen zurück- Returns:
- alle gültigen sendenden Anmeldungen (Quellen und Sender)
-
getValidReceiverSubscriptions
Gibt alle gültigen empfangenden Anmeldungen zurück- Returns:
- alle gültigen empfangenden Anmeldungen (Senken und Empfänger)
-
isEmpty
public boolean isEmpty()Gibttrue
zurück, wenn es keine Anmeldungen gibt- Returns:
true
, wenn es keine Anmeldungen gibt, sonstfalse
-
isCentralDistributor
public boolean isCentralDistributor()Gibttrue
zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist- Returns:
true
, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist, sonstfalse
-
getNextDataIndex
public long getNextDataIndex(long runningNumber) Berechnet den nächsten Datenindex und gibt diesen zurück- Parameters:
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sind- Returns:
- nächsten Datenindex, "0" falls dieser Datenverteiler nicht der Zentraldatenverteiler ist.
-
getCurrentDataIndex
public long getCurrentDataIndex(long runningNumber) Gibt den zuletzt berechneten Datenindex zurück- Parameters:
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sind- Returns:
- zuletzt berechneten Datenindex, "0" falls dieser Datenverteiler nicht der Zentraldatenverteiler ist.
-
distributeTelegram
public void distributeTelegram(de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram applicationDataTelegram, boolean toCentralDistributor, CommunicationInterface communication, long applicationId) Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfänger- Parameters:
applicationDataTelegram
- DatentelegrammtoCentralDistributor
- wenn das Telegramm noch nicht beim Zentraldatenverteiler behandelt wurde, also der Datenindex noch nicht vernünftig gesetzt wurdecommunication
- Verbindung über die der Emfang erfolgt ist (zur Rechteprüfung), bei null findet keine Prüfung stattapplicationId
- Applikation, die das Telegramm ursprünglich gesendet hat oder -1 falls unbekannt
-
distributeTelegrams
public void distributeTelegrams(List<de.bsvrz.dav.daf.communication.lowLevel.telegrams.ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication, long applicationId) Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfänger- Parameters:
applicationDataTelegrams
- DatentelegrammetoCentralDistributor
- wenn das Telegramm noch nicht beim Zentraldatenverteiler behandelt wurde, also der Datenindex noch nicht vernünftig gesetzt wurdecommunication
- Verbindung über die der Emfang erfolgt ist (zur Rechteprüfung), bei null findet keine Prüfung stattapplicationId
- Applikation, die die Telegramme ursprünglich gesendet hat oder -1 falls unbekannt
-
updatePendingSubscriptionDataIndex
public void updatePendingSubscriptionDataIndex(CommunicationInterface communication, long dataIndex) -
handleUserRightsChanged
public void handleUserRightsChanged(long userId) Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültig- Parameters:
userId
- geänderter Benutzer, dessen Anmeldungen zu aktualisieren sind
-
setRemoteSourceSubscriptionStatus
public void setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId) Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung- Parameters:
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilers
-
setRemoteDrainSubscriptionStatus
public void setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId) Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung- Parameters:
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilers
-
getBaseSubscriptionInfo
public de.bsvrz.dav.daf.communication.lowLevel.telegrams.BaseSubscriptionInfo getBaseSubscriptionInfo()Gibt das BaseSubscriptionInfo zurück- Returns:
- das BaseSubscriptionInfo
-
updateRemoteConnections
public void updateRemoteConnections()Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren -
hasSource
public boolean hasSource()Gibttrue
zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)- Returns:
true
, wenn eine Quelle verbunden ist, sonstfalse
-
hasDrain
public boolean hasDrain()Gibttrue
zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)- Returns:
true
, wenn eine Senke verbunden ist, sonstfalse
-
isValidSender
Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)- Parameters:
communication
- Kommunikation- Returns:
- true wenn gültig
-
setMultiRemoteLockActive
public void setMultiRemoteLockActive(boolean multiRemoteLockActive) Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt haben- Parameters:
multiRemoteLockActive
- ob die Sperre_multiRemoteLockActive
aktiv sein soll.
-
getSendingSubscriptions
public List<SendingSubscription> getSendingSubscriptions(CommunicationInterface communicationInterface) Gibt alle Sende-Anmeldungen zu einer Verbindung zurück- Parameters:
communicationInterface
- Verbindung- Returns:
- Alle Quellen und Sender hinter dieser Verbindung (evtl. eine leere Liste falls nicht vorhanden)
-
getReceivingSubscriptions
public List<ReceivingSubscription> getReceivingSubscriptions(CommunicationInterface communicationInterface) Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück- Parameters:
communicationInterface
- Verbindung- Returns:
- Alle Senken und Empfänger hinter dieser Verbindung (evtl. eine leere Liste falls nicht vorhanden)
-
getSendingSubscriptions
Gibt alle sendenden Anmeldungen zurück- Returns:
- alle Sender und Quellen dieser Datenidentifikation
-
getReceivingSubscriptions
Gibt alle Empfangs-Anmeldungen zurück- Returns:
- alle Senken und Empfänger dieser Datenidentifikation
-
updateBestWay
public void updateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection) Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibt- Parameters:
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbindungnewConnection
- Neue Verbindung
-
serializeToBytes
Serialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.- Returns:
- Byte-Array
- Throws:
IOException
-
toString
-
getOrCreateRemoteDrainSubscription
public RemoteDrainSubscription getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection) Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht- Parameters:
connection
- Verbindung- Returns:
- Senkenanmeldung
-
getOrCreateRemoteSourceSubscription
public RemoteSourceSubscription getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection) Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht- Parameters:
connection
- Verbindung- Returns:
- Quellenanmeldung
-
updateOrCreateRemoteReceiverSubscription
public void updateOrCreateRemoteReceiverSubscription(TransmitterCommunicationInterface communication, Collection<Long> ids) Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Empfänger (dieser Datenverteiler ist dann typischerweise potentiell Quell-Datenverteiler bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler). Wenn es schon eine bestehende Anmeldung gibt wird diese stattdessen um die potentiellen Zentraldatenverteiler erweitert.- Parameters:
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollen
-
updateOrCreateRemoteSenderSubscription
public void updateOrCreateRemoteSenderSubscription(TransmitterCommunicationInterface communication, Collection<Long> ids) Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Sender (dieser Datenverteiler ist dann typischerweise potentiell eine Senke bzw. agiert als Proxy zum eigentlichen Zentraldatenverteiler). Wenn es schon eine bestehende Anmeldung gibt wird diese stattdessen um die potentiellen Zentraldatenverteiler erweitert.- Parameters:
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollen
-
open
public void open()Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.Wird auf den SubscriptionsManager synchronisiert ausgeführt
-
close
public void close()Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden. Falls das Objekt leer ist und von keinem mehr offen ist, wird geprüft ob Anmeldungen vorhanden sind. Falls nicht, wird das Objekt aus dem SubscriptionsManager entfernt.Synchronisiert auf den _subscriptionsManager, daher keine Synchronisation von _referenceCounter notwendig.
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-