public abstract class SingleClientSenderTask extends SingleTask implements ClientSenderInterface
Diese Klasse ist die Basis-Klasse aller Single-Tasks, die mit dem DAV kommunizieren.
Modifier and Type | Field and Description |
---|---|
protected AttributeGroup |
atgQuery
Attributgruppe der Archiv-Anfrage und -Antwort.
|
protected DataDescription |
ddResponse
DataDescription der Archiv-Antwort.
|
protected Deserializer |
deserializer |
protected SystemObject |
queryAppObj
Applikations-Objekt des Absenders der Archiv-Anfrage.
|
protected int |
queryIdx
Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.
|
private java.io.ByteArrayOutputStream |
resultStream |
static int |
SENDCONTROL_TIMEOUT
Zeit in Millisekunden, die auf eine positive Sendesteuerung gewartet wird
|
private boolean |
sendingAllowed
Aktueller Zustand der Sendesteuerung.
|
private Serializer |
serializer |
protected int |
serializerVersion
Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt werden muss.
|
protected java.lang.Object |
syncObj
Spezielles Objekt zur Synchronisiserung.
|
TERMINATE_TASK
_debug, _shouldTerminate, archMgr, didTree, INDEX_MEMORY_SIZE, persMgr
START_SENDING, STOP_SENDING, STOP_SENDING_NO_RIGHTS, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
Constructor and Description |
---|
SingleClientSenderTask(ArchiveManager archiveMgr,
java.util.concurrent.BlockingQueue<java.lang.Object> inputData)
Erzeugt einen neuen SingleClientSenderTask.
|
Modifier and Type | Method and Description |
---|---|
void |
dataRequest(SystemObject object,
DataDescription dataDescription,
byte state)
Sendesteuerung des Datenverteilers an die Applikation.
|
private int |
getMessageTypeResult() |
void |
getObjectsFromDav()
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.
|
protected void |
init(Data data)
Initialisiert den Task für eine neue Archivanfrage.
|
protected void |
insertData(Serializer serializer) |
boolean |
isRequestSupported(SystemObject object,
DataDescription dataDescription)
Diese Methode muss von der Applikation implementiert werden, um zu signalisieren, ob Sendesteuerungen erwünscht sind und mit der Methode
dataRequest verarbeitet werden. |
protected ArchiveDataSpecification[] |
parseArchiveDataSpec(Deserializer ds,
ResultData resultData) |
protected void |
sendErrorResponse(int messageTypeResult,
java.lang.String errorMessage) |
protected void |
sendErrorResponse(java.lang.String errorMessage) |
private void |
sendResponse(boolean success,
java.lang.String msg) |
private void |
sendResponse(int messageTypeResult,
boolean success,
java.lang.String msg) |
protected void |
sendSuccessResponse() |
protected void |
sendSuccessResponse(int messageTypeResult) |
protected void |
subscribeSender()
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt an.
|
protected void |
unsubscribeSender()
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
|
getQueue, step, submit, terminateTask, work
execute
addTaskStepListener, cleanUp, getArchMgr, getName, getState, isAlive, isTerminated, join, removeTaskStepListener, setName, shouldTerminate, start, suspendTaskIfNecessary, taskStepDone
public static final int SENDCONTROL_TIMEOUT
Zeit in Millisekunden, die auf eine positive Sendesteuerung gewartet wird
private boolean sendingAllowed
Aktueller Zustand der Sendesteuerung.
protected java.lang.Object syncObj
Spezielles Objekt zur Synchronisiserung. Immer dieses anstatt this verwenden!
protected int serializerVersion
Serialisiererversion der anfragenden Applikation, mit der auch die Antwort erstellt werden muss.
protected AttributeGroup atgQuery
Attributgruppe der Archiv-Anfrage und -Antwort.
protected DataDescription ddResponse
DataDescription der Archiv-Antwort.
protected SystemObject queryAppObj
Applikations-Objekt des Absenders der Archiv-Anfrage.
protected int queryIdx
Anfrage-Index der anfragenden Applikation zur Archiv-Anfrage.
private java.io.ByteArrayOutputStream resultStream
private Serializer serializer
protected Deserializer deserializer
public SingleClientSenderTask(ArchiveManager archiveMgr, java.util.concurrent.BlockingQueue<java.lang.Object> inputData)
Erzeugt einen neuen SingleClientSenderTask.
archiveMgr
- Der Archiv-Manager.inputData
- Eingangswarteschlangepublic void getObjectsFromDav()
Task
Wird aufgerufen, sobald eine Datenverteilerverbindung verfügbar ist. kann benutzt werden, um Objekte zu laden und Anmeldungen durchzuführen.
Wichtig: Diese Methode wird im Konstruktor ausgeführt und sollte daher nicht erwarten, dass die Subklasse (this
) vollständig initialisiert ist.
getObjectsFromDav
in class Task
protected void init(Data data) throws NoSuchVersionException
Initialisiert den Task für eine neue Archivanfrage.
NoSuchVersionException
protected void sendErrorResponse(java.lang.String errorMessage)
protected void sendSuccessResponse()
protected void sendErrorResponse(int messageTypeResult, java.lang.String errorMessage)
protected void sendSuccessResponse(int messageTypeResult)
private void sendResponse(boolean success, java.lang.String msg)
private void sendResponse(int messageTypeResult, boolean success, java.lang.String msg)
protected void insertData(Serializer serializer) throws java.io.IOException
java.io.IOException
private int getMessageTypeResult()
protected void subscribeSender() throws OneSubscriptionPerSendData
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt an. Registriert den StreamMultiplexer für den Empfang von Flusskontroll-Steuerungspaketen.
OneSubscriptionPerSendData
protected void unsubscribeSender()
Meldet den Task als Sender für Archiv-Antworten an das angegebene Empfaenger-Applikations-Objekt ab.
public void dataRequest(SystemObject object, DataDescription dataDescription, byte state)
de.bsvrz.dav.daf.main.ClientSenderInterface
dataRequest
in interface ClientSenderInterface
object
- Das in der zugehörigen Sendeanmeldung angegebene Objekt, auf das sich die Sendesteuerung bezieht.dataDescription
- Beschreibende Informationen zu den angemeldeten Daten auf die sich die Sendesteuerung bezieht.state
- Status der Sendesteuerung. Kann einen der Werte START_SENDING
, STOP_SENDING
,
STOP_SENDING_NO_RIGHTS
, STOP_SENDING_NOT_A_VALID_SUBSCRIPTION
enthalten.ClientSenderInterface.dataRequest(SystemObject,DataDescription,byte)
public boolean isRequestSupported(SystemObject object, DataDescription dataDescription)
de.bsvrz.dav.daf.main.ClientSenderInterface
dataRequest
verarbeitet werden. In der Implementierung dieser Methode dürfen keine synchronen Aufrufe, die auf Telegramme vom Datenverteiler
warten (wie z.B. Konfigurationsanfragen) durchgeführt werden, da ansonsten ein Deadlock entsteht.isRequestSupported
in interface ClientSenderInterface
object
- Das in der zugehörigen Sendeanmeldung angegebene System-Objekt.dataDescription
- Die in der zugehörigen Sendeanmeldung angegebenen beschreibenden Informationen der angemeldeten Daten.true
, falls Sendesteuerungen gewünscht sind, sonst false
.ClientSenderInterface.isRequestSupported(SystemObject,DataDescription)
protected ArchiveDataSpecification[] parseArchiveDataSpec(Deserializer ds, ResultData resultData) throws java.lang.Exception
java.lang.Exception