public abstract class AbstractSenderReceiverCommunication extends java.lang.Object implements SenderReceiverCommunication
Bietet eine Kommunikation mit einem Sender und einer Senke. Der Sender verschickt Aufträge, die Antworten auf diese Aufträge werden dann durch die Quelle empfangen.
Modifier and Type | Class and Description |
---|---|
private class |
AbstractSenderReceiverCommunication.AnswerReceiver
Receiverklasse, die Anworten der Konfiguration verarbeitet
|
private static class |
AbstractSenderReceiverCommunication.DataIdent
Klasse für eine Datenidentifikation, wird als Key in
_drainSubscriptions benutzt. |
static interface |
AbstractSenderReceiverCommunication.DataListener
Dieses Interface ermöglich es Daten, die durch eine Instanz der Klasse
AbstractSenderReceiverCommunication empfangen wurde, zu verarbeiten, bevor diese durch den normalen Mechanismus bearbeitet werden. |
private static class |
AbstractSenderReceiverCommunication.DrainSubscription
Klasse, die mehrere Empfängsobjekte an einer Senke kapselt
|
private class |
AbstractSenderReceiverCommunication.RequestSender
Callback-Klasse für Sendeanmeldung der Anfragen
|
SenderReceiverCommunication.ConnectionState
Modifier and Type | Field and Description |
---|---|
private boolean |
_closed
Wird auf true gesetzt, wenn die Verbindung zum Datenverteiler geschlossen wurde
|
private ClientDavInterface |
_connection |
private SenderReceiverCommunication.ConnectionState |
_connectionState |
private AbstractSenderReceiverCommunication.DataListener |
_dataListener
Objekt, das Telegramm verarbeiten kann und dieses dann aus dem Strom der Telegramme entfernen kann.
|
private DataState |
_dataStateReceiver
Beschreibt ob der Empfänger für Antworten für Konfigurationsanfragen diese Antworten auch empfangen darf.
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private static java.util.Map<AbstractSenderReceiverCommunication.DataIdent,AbstractSenderReceiverCommunication.DrainSubscription> |
_drainSubscriptions
Verwaltet die angemeldeten Senken
|
private java.lang.Object |
_monitor |
private ClientReceiverInterface |
_receiver |
private SystemObject |
_receiverObject |
private java.util.List<Data> |
_replyList
Hier werden die Antworten von der Konfiguration abgelegt, die dann zur weiteren Verarbeitung von der Methode “waitForReply” wieder herausgenommen werden.
|
private DataDescription |
_requestDescription
Für Anfragen
|
private ClientSenderInterface |
_requester |
private int |
_requestIndex |
private DataDescription |
_responseDescription
Für Antworten, kann
null bleiben, wenn keine Antworten benötigt werden |
private SystemObject |
_senderObject |
private boolean |
_subscribeReceiver |
Modifier | Constructor and Description |
---|---|
protected |
AbstractSenderReceiverCommunication(ClientDavInterface connection,
SystemObject senderObject,
SystemObject ordererObject) |
Modifier and Type | Method and Description |
---|---|
void |
close()
Schließt alle geöffneten Verbindungen und beendet mögliche Threads
|
private Data |
createRequestData(java.lang.String messageType,
byte[] message,
int requestIndex) |
SenderReceiverCommunication.ConnectionState |
getConnectionState()
Diese Methode gibt den derzeitigen Zustand einer Anmeldung als Sender/Quelle wieder.
|
void |
handleReply(Data data) |
void |
init(AttributeGroup requestAtg,
Aspect requestAspect,
AttributeGroup responseAtg,
Aspect responseAspect,
AbstractSenderReceiverCommunication.DataListener dataListener)
Meldet einen Sender und eine Senke auf die übergebenen Parameter an, wenn alle vier Parameter gesetzt sind.
|
void |
init(AttributeGroup requestAtg,
Aspect requestAspect,
AttributeGroup responseAtg,
Aspect responseAspect,
short simulationVariant,
AbstractSenderReceiverCommunication.DataListener dataListener)
Meldet einen Sender und eine Senke auf die übergebenen Parameter an, wenn alle vier Parameter gesetzt sind.
|
int |
sendData(java.lang.String messageType,
byte[] data)
Verschickt eine Anfrage vom angegeben Typ und mit dem in einem Byte Array angegebenen serialisierten Inhalt, die Methode gibt ohne zu blockieren eine neue Anfragenummer zurück.
|
void |
sendData(java.lang.String messageType,
byte[] data,
int queryIndex)
Verschickt eine Antwort vom angegeben Typ zu einer Anfrage.
|
void |
setMutableCollectionChangeListener(MutableCollectionChangeListener notifyingMutableCollectionChangeListener)
Setzt den Listener zur Verarbeitung und Verteilung von Aktualisierungsnachrichten bzgl.
|
Data |
waitForReply(int requestIndex)
Stellt die Antwort auf eine Anfrage zur Verfügung
|
private static final Debug _debug
DebugLogger für Debug-Ausgaben
private final ClientDavInterface _connection
private final SystemObject _senderObject
private final SystemObject _receiverObject
private AbstractSenderReceiverCommunication.DataListener _dataListener
Objekt, das Telegramm verarbeiten kann und dieses dann aus dem Strom der Telegramme entfernen kann. Ist das Objekt null
, werden die Telegramme normal durch diese Klasse bearbeitet.
private DataState _dataStateReceiver
Beschreibt ob der Empfänger für Antworten für Konfigurationsanfragen diese Antworten auch empfangen darf. Dürfen keine antworten empfangen werden, weil die Rechte nicht gesetzt wurde, so darf auch keine Anfrage gesendet werden (da die Antwort der Konfigurations niemals empfangen werden könnte und ewig auf die Antwort gewartet werden würde).
Der default DataState.DATA ist zufällig gewählt und muss nur ungleich DataState.NO_RIGHTS sein.
private DataDescription _requestDescription
Für Anfragen
private DataDescription _responseDescription
Für Antworten, kann null
bleiben, wenn keine Antworten benötigt werden
private final java.lang.Object _monitor
private int _requestIndex
private SenderReceiverCommunication.ConnectionState _connectionState
private boolean _subscribeReceiver
private java.util.List<Data> _replyList
Hier werden die Antworten von der Konfiguration abgelegt, die dann zur weiteren Verarbeitung von der Methode “waitForReply” wieder herausgenommen werden.
private boolean _closed
Wird auf true gesetzt, wenn die Verbindung zum Datenverteiler geschlossen wurde
private ClientSenderInterface _requester
private ClientReceiverInterface _receiver
private static final java.util.Map<AbstractSenderReceiverCommunication.DataIdent,AbstractSenderReceiverCommunication.DrainSubscription> _drainSubscriptions
Verwaltet die angemeldeten Senken
protected AbstractSenderReceiverCommunication(ClientDavInterface connection, SystemObject senderObject, SystemObject ordererObject)
connection
- Verbindung zum DaVsenderObject
- Objekt, zum anmelden für SendeaufträgeordererObject
- Objekt, zum anmelden als Senke (siehe init(de.bsvrz.dav.daf.main.config.AttributeGroup, de.bsvrz.dav.daf.main.config.Aspect, de.bsvrz.dav.daf.main.config.AttributeGroup, de.bsvrz.dav.daf.main.config.Aspect, de.bsvrz.dav.daf.main.impl.config.request.telegramManager.AbstractSenderReceiverCommunication.DataListener)
). Dieses Objekt wird beim versenden auch als “Absender” eingetragen. Dadurch weiss die Empfangende Applikation (senderObjekt), wohin die Antwort muss(wenn eine Senke angemeldet wurde) bzw. wer die Antwort verschickt hat.public void init(AttributeGroup requestAtg, Aspect requestAspect, AttributeGroup responseAtg, Aspect responseAspect, AbstractSenderReceiverCommunication.DataListener dataListener) throws OneSubscriptionPerSendData
Meldet einen Sender und eine Senke auf die übergebenen Parameter an, wenn alle vier Parameter gesetzt sind. Als Simulationsvariante wird die beim starten der Applikation gesetzt Variante benutzt.
Sind die Parameter responseAtg und responseAspect null
, wird keine Senke angemeldet sondern nur der Sender.
requestAtg
- ATG für Anfrage (Anmeldung als Sender)requestAspect
- Aspekt für Anfragen (Anmeldung für Sender)responseAtg
- ATG für Antworten auf Anfragen (Anmeldung als Senke) oder null
, wenn kein Senke angemeldet werden soll.responseAspect
- Aspekt für Antworten auf Anfragen (Anmeldung als Senke) oder null
, wenn kein Senke angemeldet werden soll.dataListener
- Objekt, das Telegramme verarbeiten und diese dann aus dem Strom der Telegramme entfernen kann. Ist das Objekt null
, werden die Telegramme nicht gefiltert und normal durch diese Klasse bearbeitet.OneSubscriptionPerSendData
- Wenn bereits eine Senke für die gleichen Daten angemeldet wurde.public void init(AttributeGroup requestAtg, Aspect requestAspect, AttributeGroup responseAtg, Aspect responseAspect, short simulationVariant, AbstractSenderReceiverCommunication.DataListener dataListener) throws OneSubscriptionPerSendData
Meldet einen Sender und eine Senke auf die übergebenen Parameter an, wenn alle vier Parameter gesetzt sind. Die zu nutzende Simulationsvariante wird übergeben.
Sind die Parameter responseAtg und responseAspect null
, wird keine Senke angemeldet sondern nur der Sender.
requestAtg
- ATG für Anfrage (Anmeldung als Sender)requestAspect
- Aspekt für Anfragen (Anmeldung für Sender)responseAtg
- ATG für Antworten auf Anfragen (Anmeldung als Senke) oder null
, wenn kein Senke angemeldet werden soll.responseAspect
- Aspekt für Antworten auf Anfragen (Anmeldung als Senke) oder null
, wenn kein Senke angemeldet werden soll.simulationVariant
- Simulationsvariante, die zur Anmeldung benutzt werden solldataListener
- Objekt, das Telegramme verarbeiten und diese dann aus dem Strom der Telegramme entfernen kann. Ist das Objekt null
, werden die Telegramme nicht gefiltert und normal durch diese Klasse bearbeitet.OneSubscriptionPerSendData
- Wenn bereits eine Senke für die gleichen Daten angemeldet wurde.public int sendData(java.lang.String messageType, byte[] data) throws SendSubscriptionNotConfirmed, java.lang.IllegalStateException
SenderReceiverCommunication
Verschickt eine Anfrage vom angegeben Typ und mit dem in einem Byte Array angegebenen serialisierten Inhalt, die Methode gibt ohne zu blockieren eine neue Anfragenummer zurück. Die Antwort kann mit SenderReceiverCommunication.waitForReply(int)
abgerufen werden.
sendData
in interface SenderReceiverCommunication
messageType
- Anfragetypdata
- Daten Serialiserte Anfragedaten.SendSubscriptionNotConfirmed
- Wenn noch keine positive Sendesteuerung vom Datenverteiler für die zu versendenden Daten vorliegtjava.lang.IllegalStateException
- Die Daten können versendet werden, aber die Antwort kann nicht empfangen werden, da für den empfang der Daten nicht die benötigten Rechte vorhanden sind. Aus diesem Grund werden die Daten nicht verschickt.public void sendData(java.lang.String messageType, byte[] data, int queryIndex) throws SendSubscriptionNotConfirmed, java.lang.IllegalStateException
SenderReceiverCommunication
Verschickt eine Antwort vom angegeben Typ zu einer Anfrage.
sendData
in interface SenderReceiverCommunication
messageType
- Antworttypdata
- Daten Serialiserte Anfragedaten.queryIndex
- Index der zugehörigen AnfrageSendSubscriptionNotConfirmed
- Wenn noch keine positive Sendesteuerung vom Datenverteiler für die zu versendenden Daten vorliegtjava.lang.IllegalStateException
- Die Daten können versendet werden, aber die Antwort kann nicht empfangen werden, da für den empfang der Daten nicht die benötigten Rechte vorhanden sind. Aus diesem Grund werden die Daten nicht verschickt.private Data createRequestData(java.lang.String messageType, byte[] message, int requestIndex)
public void handleReply(Data data)
public Data waitForReply(int requestIndex) throws RequestException
SenderReceiverCommunication
Stellt die Antwort auf eine Anfrage zur Verfügung
waitForReply
in interface SenderReceiverCommunication
requestIndex
- Index, der bei der Methode SenderReceiverCommunication.sendData(java.lang.String, byte[])
als Rückgabeparameter zurückgegeben wurdeRequestException
- Wenn die Kommunikation zum Datenverteiler unterbrochen wurde.public SenderReceiverCommunication.ConnectionState getConnectionState()
SenderReceiverCommunication
Diese Methode gibt den derzeitigen Zustand einer Anmeldung als Sender/Quelle wieder.
getConnectionState
in interface SenderReceiverCommunication
public void close()
SenderReceiverCommunication
Schließt alle geöffneten Verbindungen und beendet mögliche Threads
close
in interface SenderReceiverCommunication
public void setMutableCollectionChangeListener(MutableCollectionChangeListener notifyingMutableCollectionChangeListener)
Setzt den Listener zur Verarbeitung und Verteilung von Aktualisierungsnachrichten bzgl. Änderungen der Elemente von dynamischen Mengen bzw. dynamischen Typen.
Defaultimplementierung erzeugt eine Exception.setMutableCollectionChangeListener
in interface SenderReceiverCommunication
notifyingMutableCollectionChangeListener
- java.lang.UnsupportedOperationException
- Wenn die Methode nicht überschrieben wurde.