public class SubscriptionInfo extends Object implements Closeable
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? (True wenn keine lokale Quelle oder Senke vorhanden ist)
|
private static Debug |
_debug |
private long |
_lastSendDataIndex
Letzter gesendeter/weitergeleiteter Datenindex (1 = kein oder nur ein künstlicher Datensatz vorher gesendet).
|
private 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 HashMap<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(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.
|
RemoteSourceSubscription |
getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
Erstellt eine Remote-Quellen-Anmeldung über eine angegebene Verbindung bzw.
|
Collection<ReceivingSubscription> |
getReceivingSubscriptions()
Gibt alle Empfangs-Anmeldungen zurück
|
List<ReceivingSubscription> |
getReceivingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Empfangs-Anmeldungen zu einer Verbindung zurück
|
Collection<SendingSubscription> |
getSendingSubscriptions()
Gibt alle sendenden Anmeldungen zurück
|
List<SendingSubscription> |
getSendingSubscriptions(CommunicationInterface communicationInterface)
Gibt alle Sende-Anmeldungen zu einer Verbindung zurück
|
List<ReceivingSubscription> |
getValidReceiverSubscriptions()
Gibt alle gültigen empfangenden Anmeldungen zurück
|
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
|
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
|
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(List<ApplicationDataTelegram> telegrams1,
List<ApplicationDataTelegram> telegrams2)
Prüft ob 2 Telegrammlisten im Sinne der Anmeldung auf Delta-Datensätze gleich sind.
|
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,
Collection<Long> ids)
Erstellt eine eingehende Anmeldung von einem anderen Datenverteiler als interessierter Empfänger (dieser Datenverteiler ist dann
typischerweise potentiell Quell-Datenverteiler bzw.
|
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.
|
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.
|
private static final Debug _debug
private final SubscriptionList _subscriptionList
private final SubscriptionsManager _subscriptionsManager
private final BaseSubscriptionInfo _baseSubscriptionInfo
private final HashMap<Long,SubscriptionInfo.PendingSubscription> _pendingSubscriptions
SubscriptionList
umgebogen und der eintrag aus dieser Map entfernt.private boolean _connectToRemoteCentralDistributor
private List<ApplicationDataTelegram> _lastSendTelegrams
private long _lastSendDataIndex
SubscriptionList
-Klasse statt.private boolean _multiRemoteLockActive
private boolean _remoteUpdateLockActive
setConnectToRemoteCentralDistributor(boolean)
rekursiv aufgerufen wird, wodurch störende Effekte entstehen können.private int _referenceCounter
public SubscriptionInfo(SubscriptionsManager subscriptionsManager, BaseSubscriptionInfo baseSubscriptionInfo)
subscriptionsManager
- AnmeldungsverwaltungbaseSubscriptionInfo
- Datenidentifikationprivate static boolean telegramsAreEqual(List<ApplicationDataTelegram> telegrams1, List<ApplicationDataTelegram> telegrams2)
telegrams1
- Daten-Telegramme 1telegrams2
- Daten-Telegramme 2private static boolean isLocalSubscription(Subscription subscription)
subscription
- Anmeldungpublic void addSendingSubscription(SendingSubscription sendingSubscription)
sendingSubscription
- neue sendende Anmeldungpublic void addReceivingSubscription(ReceivingSubscription receivingSubscription)
receivingSubscription
- neue empfangende Anmeldungprivate void refreshSubscriptionsOnNewSender(SendingSubscription sendingSubscription)
sendingSubscription
- neue sendende Anmeldungprivate void refreshSubscriptionsOnNewReceiver(ReceivingSubscription receivingSubscription)
receivingSubscription
- neue empfangende Anmeldungprivate void updateSenderReceiverStatus()
private boolean hasPendingRemoteSubscriptions()
private void refreshSubscriptionsOnSenderRemoval(SendingSubscription toRemove)
toRemove
- Abmeldender Sender/Quelleprivate void refreshSubscriptionsOnReceiverRemoval(ReceivingSubscription toRemove)
toRemove
- Abmeldender Empfänger/Senkeprivate void refreshSubscriptions(Subscription toIgnore)
toIgnore
- Anmeldung die gerade abgemeldet wird und folglich eben nicht aktiviert werden sollprivate void updateMultiRemoteConnectionsLock()
_multiRemoteLockActive
dargestellt wird.private boolean getMultipleRemoteConnectionsSubscribed()
private void updateRemoteConnectionsNecessary()
private boolean needsToConnectToRemoteCentralDav()
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)
newValue
- Soll zu anderen Zentraldatenverteilern verbunden werden?private void createRemoteCentralDistributorSubscriptions()
private void removeRemoteSubscriptions()
private void removeNegativeRemoteSubscriptions()
public void removeReceivingSubscription(ReceivingSubscription receivingSubscription)
receivingSubscription
- empfangende Anmeldungpublic void removeSendingSubscription(SendingSubscription sendingSubscription)
sendingSubscription
- sendende Anmeldungpublic List<SendingSubscription> removeSendingSubscriptions(CommunicationInterface communication)
communication
- Verbindungpublic List<ReceivingSubscription> removeReceivingSubscriptions(CommunicationInterface communication)
communication
- Verbindungpublic List<SendingSubscription> getValidSenderSubscriptions()
public List<ReceivingSubscription> getValidReceiverSubscriptions()
public boolean isEmpty()
public boolean isCentralDistributor()
public long getNextDataIndex(long runningNumber)
runningNumber
- Laufende Nummer, wird vom SubscriptionsManager bereitgestellt, da diese Objekte gelöscht werden sobas keine
Anmeldungen mehr vorhanden sindpublic long getCurrentDataIndex(long runningNumber)
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)
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(List<ApplicationDataTelegram> applicationDataTelegrams, boolean toCentralDistributor, CommunicationInterface communication)
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)
userId
- geänderter Benutzer, dessen Anmeldungen zu aktualisieren sindpublic void setRemoteSourceSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilerspublic void setRemoteDrainSubscriptionStatus(TransmitterCommunicationInterface communication, ConnectionState state, long mainTransmitterId)
communication
- Kommunikationstate
- neuer StatusmainTransmitterId
- Id des Zentraldatenverteilersprivate void handlePendingSubscriptions(long mainTransmitterId, TransmitterCommunicationInterface transmitterCommunicationInterface, ConnectionState state)
mainTransmitterId
- Zentraldatenverteiler-IdtransmitterCommunicationInterface
- Kommunikation der neuen Anmeldungstate
- neuer Status der Anmeldungprivate void replaceReceiver(RemoteDrainSubscription oldSubscription, RemoteDrainSubscription newSubscription)
oldSubscription
- alte AnmeldungnewSubscription
- neue Anmeldungprivate void replaceSender(RemoteSourceSubscription oldSubscription, RemoteSourceSubscription newSubscription)
oldSubscription
- alte AnmeldungnewSubscription
- neue Anmeldungprivate long getCentralDistributorId()
private void setDrain(ReceivingSubscription drain)
drain
- neue Senkeprivate void setSource(SendingSubscription source)
source
- neue Quellepublic BaseSubscriptionInfo getBaseSubscriptionInfo()
public void updateRemoteConnections()
public boolean hasSource()
public boolean hasDrain()
public boolean isValidSender(CommunicationInterface communication)
communication
- Kommunikationpublic void setMultiRemoteLockActive(boolean multiRemoteLockActive)
multiRemoteLockActive
- ob die Sperre _multiRemoteLockActive
aktiv sein soll.public List<SendingSubscription> getSendingSubscriptions(CommunicationInterface communicationInterface)
communicationInterface
- Verbindungpublic List<ReceivingSubscription> getReceivingSubscriptions(CommunicationInterface communicationInterface)
communicationInterface
- Verbindungpublic Collection<SendingSubscription> getSendingSubscriptions()
public Collection<ReceivingSubscription> getReceivingSubscriptions()
public void updateBestWay(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbindungnewConnection
- Neue Verbindungprivate void updateBestWaySource(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbidnungnewConnection
- Neue Verbindungprivate void updateBestWayDrain(long transmitterId, TransmitterCommunicationInterface oldConnection, TransmitterCommunicationInterface newConnection)
transmitterId
- Zentraldatenverteiler-IDoldConnection
- Alte VerbidnungnewConnection
- Neue Verbindungprivate void addReplacementSubscription(long transmitterId, RemoteCentralSubscription newSub)
transmitterId
- Zentraldatenverteiler-IdnewSub
- Anmeldung beim Zentraldatenverteilerpublic byte[] serializeToBytes() throws IOException
IOException
public RemoteDrainSubscription getOrCreateRemoteDrainSubscription(TransmitterCommunicationInterface connection)
connection
- Verbindungpublic RemoteSourceSubscription getOrCreateRemoteSourceSubscription(TransmitterCommunicationInterface connection)
connection
- Verbindungpublic void updateOrCreateRemoteReceiverSubscription(TransmitterCommunicationInterface communication, Collection<Long> ids)
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollenpublic void updateOrCreateRemoteSenderSubscription(TransmitterCommunicationInterface communication, Collection<Long> ids)
communication
- Verbindungids
- Liste mit Zentaldatenverteiler-Ids, die berücksichtigt werden sollenpublic void open()
public void close()
close
in interface Closeable
close
in interface AutoCloseable