public class SubscriptionInfo
extends java.lang.Object
implements java.io.Closeable
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.
Modifier and Type | Class and Description |
---|---|
private static class |
SubscriptionInfo.PendingSubscription
Wrapper-Klasse für eine wartende Umleitungsanmeldung
|
Modifier and Type | Field and Description |
---|---|
private BaseSubscriptionInfo |
_baseSubscriptionInfo
Datenidentifikation
|
private boolean |
_connectToRemoteCentralDistributor
Soll versucht werden, sich zu einem entfernten Datenverteiler zu verbinden?
|
private static Debug |
_debug |
private long |
_lastSendDataIndex
Letzter gesendeter/weitergeleiteter Datenindex (1 = kein oder nur ein künstlicher Datensatz vorher gesendet).
|
private java.util.List<ApplicationDataTelegram> |
_lastSendTelegrams
Zwischenspeicher für die zuletzt gesendeten Telegramme einer Quelle
|
private boolean |
_multiRemoteLockActive
Sind Anmeldungen gesperrt, weil es mehrere Remote-Datenverteiler mit positiven Rückmeldungen gibt?
|
private java.util.HashMap<java.lang.Long,SubscriptionInfo.PendingSubscription> |
_pendingSubscriptions
Laufende Anmeldeumleitungen, enthalt eine Map mit Zuordnung ZentralverteilerId->Neue Verbindung.
|
private int |
_referenceCounter |
private boolean |
_remoteUpdateLockActive
Ist true während die Remote-Anmeldungen aktualisiert werden.
|
private SubscriptionList |
_subscriptionList
Liste mit Anmeldungen
|
private SubscriptionsManager |
_subscriptionsManager
Referenz auf die Anmeldungsverwaltung
|
Constructor and Description |
---|
SubscriptionInfo(SubscriptionsManager subscriptionsManager,
BaseSubscriptionInfo baseSubscriptionInfo)
Erstellt eine neue SubscriptionInfo
|
Modifier and Type | Method and Description |
---|---|
void |
addReceivingSubscription(ReceivingSubscription receivingSubscription)
Fügt eine empfangende Anmeldung hinzu
|
private void |
addReplacementSubscription(long transmitterId,
RemoteCentralSubscription newSub)
Erstellt eine (zuerst wartende) Umleitungsanmeldung
|
void |
addSendingSubscription(SendingSubscription sendingSubscription)
Fügt eine sendende Anmeldung hinzu
|
void |
close()
Markiert das SubscriptionInfo als geschlossen, nachdem Änderungen an den Anmeldungen durchgeführt wurden.
|
private void |
createRemoteCentralDistributorSubscriptions()
Führt Anmeldungen bei anderen Datenverteilern durch
|
void |
distributeTelegram(ApplicationDataTelegram applicationDataTelegram,
boolean toCentralDistributor,
CommunicationInterface communication)
Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfänger
|
void |
distributeTelegrams(java.util.List<ApplicationDataTelegram> applicationDataTelegrams,
boolean toCentralDistributor,
CommunicationInterface communication)
Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfänger
|
BaseSubscriptionInfo |
getBaseSubscriptionInfo()
Gibt das BaseSubscriptionInfo zurück
|
private long |
getCentralDistributorId()
Gibt die Zentraldatenverteiler-ID zurück
|
long |
getCurrentDataIndex(long runningNumber)
Gibt den zuletzt berechneten Datenindex zurück
|
private boolean |
getMultipleRemoteConnectionsSubscribed()
Prüft ob mehrere Remote-Zentraldatenverteiler eine positive Rückmeldung auf eine Datenanmeldung gesendet haben.
|
long |
getNextDataIndex(long runningNumber)
Berechnet den nächsten Datenindex und gibt diesen zurück
|
RemoteDrainSubscription |
getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
|
RemoteSourceSubscription |
getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
|
java.util.Collection<ReceivingSubscription> |
getReceivingSubscriptions()
Gibt alle Empfangs-Anmeldungen zurück
|
java.util.List<ReceivingSubscription> |
getReceivingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück
|
java.util.Collection<SendingSubscription> |
getSendingSubscriptions()
Gibt alle sendenden Anmeldungen zurück
|
java.util.List<SendingSubscription> |
getSendingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Sende-Anmeldungen zu einer Verbindung zurück
|
java.util.List<ReceivingSubscription> |
getValidReceiverSubscriptions()
Gibt alle gültigen empfangenden Anmeldungen zurück
|
java.util.List<SendingSubscription> |
getValidSenderSubscriptions()
Gibt alle gültigen sendenden Anmeldungen zurück
|
private void |
handlePendingSubscriptions(long mainTransmitterId,
TransmitterCommunicationInterface transmitterCommunicationInterface,
ConnectionState state)
Aktualisiert Anmeldeumleitungen, ersetzt die alte Anmeldung falls Umleitung erfolgreich oder entfernt die neue Verbindung falls nicht erfolgreich.
|
void |
handleUserRightsChanged(long userId)
Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültig
|
boolean |
hasDrain()
Gibt true zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)
|
private boolean |
hasPendingRemoteSubscriptions()
Gibt zurück, ob noch Anmeldungen bei anderen Datenverteilern laufen und daher derzeit keine Aktualisierungen von Anmeldungen erfolgen sollten.
|
boolean |
hasSource()
Gibt true zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)
|
boolean |
isCentralDistributor()
Gibt true zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist
|
boolean |
isEmpty()
Gibt true zurück, wenn es keine Anmeldungen gibt
|
private static boolean |
isLocalSubscription(Subscription subscription)
Prüft ob eine Anmeldung lokal ist
|
boolean |
isValidSender(CommunicationInterface communication)
Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)
|
private boolean |
needsToConnectToRemoteCentralDav()
Gibt zurück, ob versucht werden soll, sich an einem anderen ZentralDatenverteiler anzumelden.
|
void |
open()
Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.
|
private void |
refreshSubscriptions(Subscription toIgnore)
Aktualisiert den Anmeldestatus von bisherigen Anmeldungen.
|
private void |
refreshSubscriptionsOnNewReceiver(ReceivingSubscription receivingSubscription)
Aktualisiert die Anmeldungszustände wenn eine neue Senke oder ein Empfänger angemeldet wird
|
private void |
refreshSubscriptionsOnNewSender(SendingSubscription sendingSubscription)
Aktualisiert die Anmeldungszustände wenn ein neuer Sender/eine neue Quelle angemeldet wird
|
private void |
refreshSubscriptionsOnReceiverRemoval(ReceivingSubscription toRemove)
Aktualisiert den Anmeldestatus von allen Anmeldungen wenn sich eine empfangende Anmeldung abmeldet
|
private void |
refreshSubscriptionsOnSenderRemoval(SendingSubscription toRemove)
Aktualisiert den Anmeldestatus von allen Anmeldungen wenn sich ein Sender abmeldet
|
private void |
removeNegativeRemoteSubscriptions()
Meldet überflüssige Anmeldungen bei Remote-Datenverteilern ab.
|
void |
removeReceivingSubscription(ReceivingSubscription receivingSubscription)
Entfernt eine empfangende Anmeldung
|
java.util.List<ReceivingSubscription> |
removeReceivingSubscriptions(CommunicationInterface communication)
Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sind
|
private void |
removeRemoteSubscriptions()
Entfernt alle Anmeldungen bei entfernten Zentraldatenverteilern
|
void |
removeSendingSubscription(SendingSubscription sendingSubscription)
Entfernt eine sendende Anmeldung
|
java.util.List<SendingSubscription> |
removeSendingSubscriptions(CommunicationInterface communication)
Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sind
|
private void |
replaceReceiver(RemoteDrainSubscription oldSubscription,
RemoteDrainSubscription newSubscription)
Ersetzt eine Anmeldung wegen einer Anmeldeumleitung
|
private void |
replaceSender(RemoteSourceSubscription oldSubscription,
RemoteSourceSubscription newSubscription)
Ersetzt eine Anmeldung wegen einer Anmeldeumleitung
|
byte[] |
serializeToBytes()
Serialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.
|
private void |
setConnectToRemoteCentralDistributor(boolean newValue)
Setzt, ob Anmeldungen bei entfernten Datenverteilern durhgeführt werden sollen und führt die An- bzw.
|
private void |
setDrain(ReceivingSubscription drain)
Setzt eine neue Senke
|
void |
setMultiRemoteLockActive(boolean multiRemoteLockActive)
Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt haben
|
void |
setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication,
ConnectionState state,
long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
|
void |
setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication,
ConnectionState state,
long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
|
private void |
setSource(SendingSubscription source)
setzt eine neue Quelle
|
private static boolean |
telegramsAreEqual(java.util.List<ApplicationDataTelegram> telegrams1,
java.util.List<ApplicationDataTelegram> telegrams2)
Prüft ob 2 Telegrammlisten im Sinne der Anmeldung auf Delta-Datensätze gleich sind.
|
java.lang.String |
toString() |
void |
updateBestWay(long transmitterId,
TransmitterCommunicationInterface oldConnection,
TransmitterCommunicationInterface newConnection)
Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibt
|
private void |
updateBestWayDrain(long transmitterId,
TransmitterCommunicationInterface oldConnection,
TransmitterCommunicationInterface newConnection)
Sorgt für eine Anmeldungsumleitung bei Remote-Senken-Anmeldungen
|
private void |
updateBestWaySource(long transmitterId,
TransmitterCommunicationInterface oldConnection,
TransmitterCommunicationInterface newConnection)
Sorgt für eine Anmeldungsumleitung bei Remote-Quell-Anmeldungen
|
private void |
updateMultiRemoteConnectionsLock()
Prüft ob mehrere Remote-Zentraldatenverteiler eine positive Rückmeldung auf eine Datenanmeldung gesendet haben.
|
void |
updateOrCreateRemoteReceiverSubscription(TransmitterCommunicationInterface communication,
java.util.Collection<java.lang.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,
java.util.Collection<java.lang.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 |
updateRemoteConnections()
Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren
|
private void |
updateRemoteConnectionsNecessary()
Prüft, ob Anmeldungen zu anderen Zentraldatenverteilern versendet werden sollen und führt diese Anmeldungen durch.
|
private void |
updateSenderReceiverStatus()
Aktualisiert den Anmeldestatus von den angemeldeten gültigen (d.h. nicht-verbotenen und nicht ungültigen) Anmeldungen
|
private static final Debug _debug
private final SubscriptionList _subscriptionList
Liste mit Anmeldungen
private final SubscriptionsManager _subscriptionsManager
Referenz auf die Anmeldungsverwaltung
private final BaseSubscriptionInfo _baseSubscriptionInfo
Datenidentifikation
private final java.util.HashMap<java.lang.Long,SubscriptionInfo.PendingSubscription> _pendingSubscriptions
Laufende Anmeldeumleitungen, enthalt eine Map mit Zuordnung ZentralverteilerId->Neue Verbindung. In dieser Map sind die neuen Verbindungen gespeichert, während sie noch aufgebaut werden. Nachdem die verbindung erfolgreich aufgebaut wurde, wird dann die eigentliche Anmeldung in der SubscriptionList
umgebogen und der eintrag aus dieser Map entfernt.
private boolean _connectToRemoteCentralDistributor
Soll versucht werden, sich zu einem entfernten Datenverteiler zu verbinden? (True wenn keine lokale Quelle oder Senke vorhanden ist)
private java.util.List<ApplicationDataTelegram> _lastSendTelegrams
Zwischenspeicher für die zuletzt gesendeten Telegramme einer Quelle
private long _lastSendDataIndex
Letzter gesendeter/weitergeleiteter Datenindex (1 = kein oder nur ein künstlicher Datensatz vorher gesendet). Die eigentliche Datenindexgenerierung im Zentraldatenverteiler findet in der SubscriptionList
-Klasse statt.
private boolean _multiRemoteLockActive
Sind Anmeldungen gesperrt, weil es mehrere Remote-Datenverteiler mit positiven Rückmeldungen gibt?
private boolean _remoteUpdateLockActive
Ist true während die Remote-Anmeldungen aktualisiert werden. Verhindert, dass setConnectToRemoteCentralDistributor(boolean)
rekursiv aufgerufen wird, wodurch störende Effekte entstehen können.
private int _referenceCounter
public SubscriptionInfo(SubscriptionsManager subscriptionsManager, BaseSubscriptionInfo baseSubscriptionInfo)
Erstellt eine neue SubscriptionInfo
subscriptionsManager
- AnmeldungsverwaltungbaseSubscriptionInfo
- Datenidentifikationprivate static boolean telegramsAreEqual(java.util.List<ApplicationDataTelegram> telegrams1, java.util.List<ApplicationDataTelegram> telegrams2)
Prüft ob 2 Telegrammlisten im Sinne der Anmeldung auf Delta-Datensätze gleich sind.
telegrams1
- Daten-Telegramme 1telegrams2
- Daten-Telegramme 2private static boolean isLocalSubscription(Subscription subscription)
Prüft ob eine Anmeldung lokal ist
subscription
- Anmeldungpublic void addSendingSubscription(SendingSubscription sendingSubscription)
Fügt eine sendende Anmeldung hinzu
sendingSubscription
- neue sendende Anmeldungpublic void addReceivingSubscription(ReceivingSubscription receivingSubscription)
Fügt eine empfangende Anmeldung hinzu
receivingSubscription
- neue empfangende Anmeldungprivate void refreshSubscriptionsOnNewSender(SendingSubscription sendingSubscription)
Aktualisiert die Anmeldungszustände wenn ein neuer Sender/eine neue Quelle angemeldet wird
sendingSubscription
- neue sendende Anmeldungprivate void refreshSubscriptionsOnNewReceiver(ReceivingSubscription receivingSubscription)
Aktualisiert die Anmeldungszustände wenn eine neue Senke oder ein Empfänger angemeldet wird
receivingSubscription
- neue empfangende Anmeldungprivate void updateSenderReceiverStatus()
Aktualisiert den Anmeldestatus von den angemeldeten gültigen (d.h. nicht-verbotenen und nicht ungültigen) Anmeldungen
private boolean hasPendingRemoteSubscriptions()
Gibt zurück, ob noch Anmeldungen bei anderen Datenverteilern laufen und daher derzeit keine Aktualisierungen von Anmeldungen erfolgen sollten. Zum beispiel wein ein lokaler Empfänger angemeldet wird liefert diese Funktion true zurück, bis es entweder eine lokale Quelle gibt, ein Datenverteiler die Anmeldung positiv quittiert hat, oder alle in Frage kommenden Datenverteiler eine negative Quittung gesendet haben.
private void refreshSubscriptionsOnSenderRemoval(SendingSubscription toRemove)
Aktualisiert den Anmeldestatus von allen Anmeldungen wenn sich ein Sender abmeldet
toRemove
- Abmeldender Sender/Quelleprivate void refreshSubscriptionsOnReceiverRemoval(ReceivingSubscription toRemove)
Aktualisiert den Anmeldestatus von allen Anmeldungen wenn sich eine empfangende Anmeldung abmeldet
toRemove
- Abmeldender Empfänger/Senkeprivate void refreshSubscriptions(Subscription toIgnore)
Aktualisiert den Anmeldestatus von bisherigen Anmeldungen. Wenn z.B. eine Senke abgemeldet wird, wird hier versucht, eventuelle andere Senken oder Quellen zu “aktivieren” (auf gültig zu setzen)
toIgnore
- Anmeldung die gerade abgemeldet wird und folglich eben nicht aktiviert werden sollprivate void updateMultiRemoteConnectionsLock()
Prüft ob mehrere Remote-Zentraldatenverteiler eine positive Rückmeldung auf eine Datenanmeldung gesendet haben. Falls ja, entsteht ein ungültiger Zustand, welcher durch _multiRemoteLockActive
dargestellt wird.
private boolean getMultipleRemoteConnectionsSubscribed()
Prüft ob mehrere Remote-Zentraldatenverteiler eine positive Rückmeldung auf eine Datenanmeldung gesendet haben.
private void updateRemoteConnectionsNecessary()
Prüft, ob Anmeldungen zu anderen Zentraldatenverteilern versendet werden sollen und führt diese Anmeldungen durch. Das ist der Fall, wenn es lokale Sender oder Empfänger-Anmeldungen gibt, aber der aktuelle Datenverteiler nicht der Zentraldatenverteiler ist.
private boolean needsToConnectToRemoteCentralDav()
Gibt zurück, ob versucht werden soll, sich an einem anderen ZentralDatenverteiler anzumelden.
Das ist der Fall, falls es sich lokal um keinen ZentralDatenverteiler handelt, also keine lokale Quelle oder Senke angemeldet ist, und es aber gültige Sender oder Empfänger-Anmeldungen gibt.
private void setConnectToRemoteCentralDistributor(boolean newValue)
Setzt, ob Anmeldungen bei entfernten Datenverteilern durhgeführt werden sollen und führt die An- bzw. Abmeldungen durch.
newValue
- Soll zu anderen Zentraldatenverteilern verbunden werden?private void createRemoteCentralDistributorSubscriptions()
Führt Anmeldungen bei anderen Datenverteilern durch
private void removeRemoteSubscriptions()
Entfernt alle Anmeldungen bei entfernten Zentraldatenverteilern
private void removeNegativeRemoteSubscriptions()
Meldet überflüssige Anmeldungen bei Remote-Datenverteilern ab. Anmeldungen sind überflüssig, wenn es genau eine andere Anmeldung mit positiver Rückmeldung gibt und der Datenverteiler dieser Anmeldung signalisiert hat, dass er nicht zuständig ist.
public void removeReceivingSubscription(ReceivingSubscription receivingSubscription)
Entfernt eine empfangende Anmeldung
receivingSubscription
- empfangende Anmeldungpublic void removeSendingSubscription(SendingSubscription sendingSubscription)
Entfernt eine sendende Anmeldung
sendingSubscription
- sendende Anmeldungpublic java.util.List<SendingSubscription> removeSendingSubscriptions(CommunicationInterface communication)
Entfernt alle sendende Anmedungen, die über die angegebene Verbindung angemeldet sind
communication
- Verbindungpublic java.util.List<ReceivingSubscription> removeReceivingSubscriptions(CommunicationInterface communication)
Entfernt alle empfangende Anmedungen, die über die angegebene Verbindung angemeldet sind
communication
- Verbindungpublic java.util.List<SendingSubscription> getValidSenderSubscriptions()
Gibt alle gültigen sendenden Anmeldungen zurück
public java.util.List<ReceivingSubscription> getValidReceiverSubscriptions()
Gibt alle gültigen empfangenden Anmeldungen zurück
public boolean isEmpty()
Gibt true zurück, wenn es keine Anmeldungen gibt
public boolean isCentralDistributor()
Gibt true zurück, wenn dieser Datenverteiler Zentraldatenverteiler für diese Anmeldung ist
public long getNextDataIndex(long runningNumber)
Berechnet den nächsten Datenindex und gibt diesen zurück
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sindpublic long getCurrentDataIndex(long runningNumber)
Gibt den zuletzt berechneten Datenindex zurück
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine Anmeldungen mehr vorhanden sindpublic void distributeTelegram(ApplicationDataTelegram applicationDataTelegram, boolean toCentralDistributor, CommunicationInterface communication)
Verschickt ein einzelnes Datentelegramm an alle interessierten und korrekt angemeldeten Empfänger
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 stattpublic void distributeTelegrams(java.util.List<ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication)
Verschickt eine Liste von zusammengehörigen Datentelegrammen an alle interessierten und korrekt angemeldeten Empfänger
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 stattpublic void updatePendingSubscriptionDataIndex(CommunicationInterface communication, long dataIndex)
public void handleUserRightsChanged(long userId)
Aktualisert die Rechte von Anmeldungen und macht diese dadurch gültig/ungültig
userId
- geänderter Benutzer, dessen Anmeldungen zu aktualisieren sindpublic void setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilerspublic void setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
Verarbeitet eine Anmeldungsquittung von einem anderen Datenverteiler, aktualisert den Status der entsprechenden ausgehenden Anmeldung
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilersprivate void handlePendingSubscriptions(long mainTransmitterId, TransmitterCommunicationInterface transmitterCommunicationInterface, ConnectionState state)
Aktualisiert Anmeldeumleitungen, ersetzt die alte Anmeldung falls Umleitung erfolgreich oder entfernt die neue Verbindung falls nicht erfolgreich.
mainTransmitterId
- Zentraldatenverteiler-IdtransmitterCommunicationInterface
- Kommunikation der neuen Anmeldungstate
- neuer Status der Anmeldungprivate void replaceReceiver(RemoteDrainSubscription oldSubscription, RemoteDrainSubscription newSubscription)
Ersetzt eine Anmeldung wegen einer Anmeldeumleitung
oldSubscription
- alte AnmeldungnewSubscription
- neue Anmeldungprivate void replaceSender(RemoteSourceSubscription oldSubscription, RemoteSourceSubscription newSubscription)
Ersetzt eine Anmeldung wegen einer Anmeldeumleitung
oldSubscription
- alte AnmeldungnewSubscription
- neue Anmeldungprivate long getCentralDistributorId()
Gibt die Zentraldatenverteiler-ID zurück
private void setDrain(ReceivingSubscription drain)
Setzt eine neue Senke
drain
- neue Senkeprivate void setSource(SendingSubscription source)
setzt eine neue Quelle
source
- neue Quellepublic BaseSubscriptionInfo getBaseSubscriptionInfo()
Gibt das BaseSubscriptionInfo zurück
public void updateRemoteConnections()
Wird aufgerufen, wenn im ListsManager ein Update stattfand und so eventuell neue oder bessere Wege für die Remote-Anmeldungen existieren
public boolean hasSource()
Gibt true zurück, wenn eine Quelle verbunden ist (entweder lokal oder über eine Transmitterverbindung)
public boolean hasDrain()
Gibt true zurück, wenn eine Senke verbunden ist (entweder lokal oder über eine Transmitterverbindung)
public boolean isValidSender(CommunicationInterface communication)
Prüft, ob die angegebene Kommunikationsklasse senden darf (also als gültiger Sender angemeldet ist)
communication
- Kommunikationpublic void setMultiRemoteLockActive(boolean multiRemoteLockActive)
Setzt, ob Anmeldung ungültig gemacht werden sollen, weil mehrere remote-Zzentraldatenverteiler positive Rückmeldungen verschickt haben
multiRemoteLockActive
- ob die Sperre _multiRemoteLockActive
aktiv sein soll.public java.util.List<SendingSubscription> getSendingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Sende-Anmeldungen zu einer Verbindung zurück
communicationInterface
- Verbindungpublic java.util.List<ReceivingSubscription> getReceivingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück
communicationInterface
- Verbindungpublic java.util.Collection<SendingSubscription> getSendingSubscriptions()
Gibt alle sendenden Anmeldungen zurück
public java.util.Collection<ReceivingSubscription> getReceivingSubscriptions()
Gibt alle Empfangs-Anmeldungen zurück
public void updateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
Wird von bestWaymanager aufgerufen, wenn es eine neue beste lokale Verbindung zu einem Zentraldatenverteiler gibt
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbindungnewConnection
- Neue Verbindungprivate void updateBestWaySource(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
Sorgt für eine Anmeldungsumleitung bei Remote-Quell-Anmeldungen
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbidnungnewConnection
- Neue Verbindungprivate void updateBestWayDrain(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
Sorgt für eine Anmeldungsumleitung bei Remote-Senken-Anmeldungen
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbidnungnewConnection
- Neue Verbindungprivate void addReplacementSubscription(long transmitterId, RemoteCentralSubscription newSub)
Erstellt eine (zuerst wartende) Umleitungsanmeldung
transmitterId
- Zentraldatenverteiler-IdnewSub
- Anmeldung beim Zentraldatenverteilerpublic byte[] serializeToBytes() throws java.io.IOException
Serialisiert die Anmelde-Informationen in Bytes um sie über den Datenverteiler zu Testzwecken abrufen zu können.
java.io.IOException
public java.lang.String toString()
toString
in class java.lang.Object
public RemoteDrainSubscription getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Senken-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
connection
- Verbindungpublic RemoteSourceSubscription getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw. gibt diese zurück wenn sie schon besteht
connection
- Verbindungpublic void updateOrCreateRemoteReceiverSubscription(TransmitterCommunicationInterface communication, java.util.Collection<java.lang.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.
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollenpublic void updateOrCreateRemoteSenderSubscription(TransmitterCommunicationInterface communication, java.util.Collection<java.lang.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.
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollenpublic void open()
Markiert das SubscriptionInfo als offen, sodass Änderungen an den Anmeldungen durchgeführt werden dürfen.
Wird auf den SubscriptionsManager synchronisiert ausgeführt
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.
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable