GlobalObjects
Lade ...
Suche ...
Keine Treffer
glo::WatchNotifyManager Klassenreferenz

Klassen um persistente Objekte überwachen zu können und bei Änderungen die jeweiligen Clients zu beanchrichtigen. Mehr ...

#include <GloWatchNotifyManager.h>

Klassendiagramm für glo::WatchNotifyManager:

Klassen

class  ClassWatch
 Überwachungsklasse für AllSets. Mehr ...
 
class  ClientWatch
 Überwachungsklasse für Client-An- bzw. Abmeldungen. Mehr ...
 
class  CommunicatorCallBackClassIndex
 Ist ein eindeutiger Index für Maps von CommunicatorClassNotifyModes und als Index für die statischen Aktionslisten. Mehr ...
 
class  CommunicatorCallBackClientIndex
 Ist ein eindeutiger Index für Maps von CommunicatorClientNotifyModes und als Index für die statischen Aktionslisten. Mehr ...
 
class  CommunicatorCallBackIndex
 Basisklasse eines eindeutiger Index für Maps von abgeleitetn Klassen von CommunicatorNotifyModes und als Index für die statischen Aktionslisten. Mehr ...
 
class  CommunicatorCallBackIndexReadWriteIndex
 Ist ein eindeutiger Index für Maps von CommunicatorCallBackIndexReadWriteIndex und als Index für die statischen Aktionslisten. Mehr ...
 
class  CommunicatorCallBackObjIndex
 Ist ein eindeutiger Index für Maps von CommunicatorObjNotifyModes und als Index für die statischen Aktionslisten. Mehr ...
 
class  CommunicatorClassNotifyModes
 Überwachungs- bzw. Benachrichtigungs-Modus von AllSets. Mehr ...
 
class  CommunicatorClientNotifyModes
 Überwachungs- bzw. Benachrichtigungs-Modus von Client An- bzw. Abmeldungen. Mehr ...
 
class  CommunicatorIndexReadWriteNotifyModes
 Überwachungs- bzw. Benachrichtigungs-Modus für Lese-Index-, Schreibe-Index- und Reindex-Aktionen der Datenbank. Mehr ...
 
class  CommunicatorNotifyModes
 Basisklasse der einzelnen Überwachungs- bzw. Benachrichtigungs-Modi. Mehr ...
 
class  CommunicatorObjNotifyModes
 Überwachungs- bzw. Benachrichtigungs-Modus von Objekten mit deren abhängigen Objekten. Abhängige Objekte sind die eingebetteten bzw. direkt mitgeladenen Objekte in Zeigern und Zeigerlisten. Mehr ...
 
class  IndexReadWriteWatch
 Überwachungsklasse für Lese-Index-, Schreibe-Index- und Reindex-Aktionen der Datenbank. Mehr ...
 
class  NotifyClientInfo
 Wird für Notify-Infos über Clients in einem Auftrag an den WatchNotifyManager genutzt. Mehr ...
 
class  NotifyIndexReadWriteInfo
 Wird für Notify-Infos zum überwachen des Lesens, Schreibens und reindizieren der Indexe in einem Auftrag an den WatchNotifyManager genutzt. Mehr ...
 
class  NotifyInfo
 Basisklasse für unterschiedliche Notify-Infos, welche in einem Auftrag an den WatchNotifyManager genutzt werden. Mehr ...
 
class  NotifyObjInfo
 Wird für Notify-Infos über Objekte in einem Auftrag an den WatchNotifyManager genutzt. Mehr ...
 
class  ObjectWatch
 Überwachungsklasse für Objekte. Mehr ...
 

Öffentliche Methoden

 WatchNotifyManager (Manager *pMyDBManager)
 
virtual ~WatchNotifyManager ()
 
virtual void cancel () override
 
void deleteCommunicatorWatches (Communicator *pCommunicator)
 
bool hasObjectWatching (TdWatchNotifyMode tdWatchNotifyMode) const
 
void takeOrder (OrderMsg *pOrderMsg)
 
- Öffentliche Methoden geerbt von eut::RepeatingThread
 RepeatingThread ()
 
virtual ~RepeatingThread ()
 
virtual void finishBreak ()
 
int getBreakCounter ()
 
bool isInExclusiveAccess () const
 
void setExclusiveAccess ()
 
void signalInput ()
 
virtual int start ()
 
RepeatingThread::STATUS status () const
 
virtual void takeABreak ()
 
bool testCancel ()
 
void unsetExclusiveAccess ()
 
void waitForInput ()
 

Geschützte Methoden

 WatchNotifyManager ()
 
void deleteAllAction (Communicator *pCommunicator, std::list< CommunicatorCallBackIndex * > &rActionList)
 
void deleteCommunicatorWatches (OrderMsg *pOrderMsg)
 
bool getClassWatch (ClassWatch *&prClassWatch, unsigned long ulClassID, bool bAlsoGenerate)
 
void processNotify (OrderMsg *pOrderMsg) const
 
void processNotify (OrderMsg *pOrderMsg, std::list< CommunicatorCallBackIndex * > &rActionList) const
 
int processObjectSetWatch (Communicator *pCommunicator, const WatchSpecification &rWatchSpecification, std::list< Manager::ObjIdWithDepends * > &rInputList)
 
int processObjectUnsetWatch (Communicator *pCommunicator, const WatchSpecification &rWatchSpecification, std::list< ObjID > &rInputList)
 
int processWatch (const std::string &rsSchemaName, Communicator *pCommunicator, OrderMsg::EnOrderType eOrderType, void *pOrderObject, void *pAdditionalInfo)
 
void processWatch (OrderMsg *pOrderMsg)
 
void removeClassWatch (unsigned long ulClassID)
 
int setInternWatch (Communicator *pCommunicator, NUM_PTR ipCallBack, const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjectsMap, TdWatchNotifyMode tdWatchNotifyMode, EnDeepMode eDeepMode)
 
int setInternWatch (Communicator *pCommunicator, NUM_PTR ipCallBack, TdWatchNotifyMode tdWatchNotifyMode)
 
int setInternWatch (Communicator *pCommunicator, NUM_PTR ipCallBack, unsigned long ulClassID, TdWatchNotifyMode tdWatchNotifyMode)
 
int unsetInternWatch (Communicator *pCommunicator, NUM_PTR ipCallBack, const ObjID &rObjID, TdWatchNotifyMode tdWatchNotifyMode, EnDeepMode eDeepMode, bool bSimulate=false)
 
int unsetInternWatch (Communicator *pCommunicator, NUM_PTR ipCallBack, TdWatchNotifyMode tdWatchNotifyMode, bool bSimulate=false)
 
int unsetInternWatch (Communicator *pCommunicator, NUM_PTR ipCallBack, unsigned long ulClassID, TdWatchNotifyMode tdWatchNotifyMode, bool bSimulate=false)
 
int unsetWatchDependObjects (Communicator *pCommunicator, NUM_PTR ipCallBack, std::stack< ObjID > &rDependObjIdStack, TdWatchNotifyMode tdWatchNotifyMode, bool bSimulate)
 
virtual void work () override
 
- Geschützte Methoden geerbt von eut::RepeatingThread
ORDER getOrder ()
 
STATUS getStatus ()
 
void setStatus (STATUS eStatus)
 
void threadWork ()
 
void toOrder (ORDER eOrder)
 

Geschützte, statische Methoden

static void insertAction (CommunicatorCallBackIndex *pCommunicatorCallBackIndex, std::list< CommunicatorCallBackIndex * > &rActionList)
 
static void removeAction (CommunicatorCallBackIndex *pCommunicatorCallBackIndex, std::list< CommunicatorCallBackIndex * > &rActionList)
 

Statische, geschützte Attribute

static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_CLIENT_CLOSEBASE_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_CLIENT_CONNECTSERVER_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_CLIENT_DISCONNECTSERVER_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_CLIENT_OPENBASE_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_DELETE_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_INDEX_READ_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_INDEX_REINDEX_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_INDEX_WRITE_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_INSERT_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_LOCK_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_UNLOCK_List
 
static std::list< WatchNotifyManager::CommunicatorCallBackIndex * > m_WNM_WRITE_List
 

Private Methoden

 WatchNotifyManager (const WatchNotifyManager &)
 
WatchNotifyManageroperator= (const WatchNotifyManager &)
 

Private Attribute

std::unordered_map< unsigned long, ClassWatch * > m_ClassWatchMap
 
ClientWatch m_ClientWatch
 
eut::CriticalSection m_ExclusiveProcessingSection
 
IndexReadWriteWatch m_IndexReadWriteWatch
 
std::queue< OrderMsg * > m_MsgQueue
 
Managerm_pMyDBManager
 
int m_iWNM_WRITE
 Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.
 
int m_iWNM_DELETE
 Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.
 
int m_iWNM_LOCK
 Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.
 
int m_iWNM_UNLOCK
 Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.
 
int m_iWNM_INSERT
 Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.
 

Weitere Geerbte Elemente

- Öffentliche Typen geerbt von eut::RepeatingThread
enum  EuTHREADERROR { EuTHREAD_ERR_NO_THREAD = -10301 , EuTHREAD_ERR_THREAD_ALREADY_WORKING = -10302 , EuTHREAD_ERR_THREAD_BREAK_COUNT_LESS_THAN_ZERO = -10303 , EuTHREAD_ERR_UNKNOWN = -10400 }
 Fehlerbereich = -10301 bis -10400 Mehr ...
 
enum  ORDER { eUNDEFINED , eDO_WORK , eEXIT }
 
enum  STATUS {
  eAT_THE_START , eWORKING , ePAUSING , eENDING ,
  eCOMPLETED
}
 
- Öffentliche Attribute geerbt von eut::RepeatingThread
std::string m_strDebugInfo
 

Ausführliche Beschreibung

Klassen um persistente Objekte überwachen zu können und bei Änderungen die jeweiligen Clients zu beanchrichtigen.

Was kann überwacht werden:

Es können Objekte, ObjektSets und AllSets zum Überwachen angemeldet werden.

Überwacht werden kann das 'Schreiben', 'Löschen', 'Sperren', 'Freigeben' und bei AllSets das 'Einfügen' eines Objektes.

Es kann das an- bzw. abmelden eines Clients an eine Datenbank bzw. GloServer's überwacht werden.

Es kann das Fortschreiten des Einlesens bzw. Schreibens und das Reindizieren der Indexe sowie das Fortschreiten des Komprimierens einer Datenbank überwacht werden.

Das Überwachungsschema:

- AllSet
Für jedes zu überwachende Objekt (Objekt-ID) bzw. AllSet (Klassen-ID) wird ein ClassWatch, welcher selbst eine Benachrichtigungs-Liste von CommunicatorClassNotifyModes besitzt, instanziiert und in die m_ClassWatchMap eingefügt.

- Objekt
Wenn ein Objekt beobachtet werden soll, wird zusätzlich ein ObjectWatch, welcher selbst eine Benachrichtigungs-Liste von CommunicatorObjNotifyModes besitzt, instanziiert und in die ClassWatch::m_ObjectWatchMap eingefügt.

- Client
Wenn das an- bzw. abmelden eines Clients an eine GloServer bzw. an eine Datenbank beobachtet werden soll, wird ein ClientWatch, welcher selbst eine Benachrichtigungs-Liste von CommunicatorClientNotifyModes besitzt, instanziiert und in die m_ClientWatch eingefügt.

- Index
Wenn das Fortschreiten des Einlesens bzw. Schreibens der Indexe beobachtet werden soll, wird ein IndexReadWriteWatch, welcher selbst eine Benachrichtigungs-Liste von CommunicatorIndexReadWriteNotifyModes besitzt, instanziiert und in m_IndexReadWriteWatch eingefügt.

- Komprimieren
Wenn das Fortschreiten des Komprimierens einer Datenbank beobachtet werden soll, wird ein IndexReadWriteWatch, welcher selbst eine Benachrichtigungs-Liste von CommunicatorIndexReadWriteNotifyModes besitzt, instanziiert und in m_IndexReadWriteWatch eingefügt.

- CommunicatorClassNotifyModes
Objekte der Klasse CommunicatorClassNotifyModes sind durch eine Referenz auf Communicator und einem Index (durch diesen kann sich der Communicator mehrmals Index-spezifisch benachrichtigen lassen) eindeutig.

CommunicatorClassNotifyModes haben für jeden Watch-Notify-Mode einen Counter, welcher in- bzw. dekrementiert werden kann (dadurch wird für jeden Communicator für jeden Index nur einmal benachrichtigt).

- CommunicatorObjNotifyModes
CommunicatorObjNotifyModes sind etwas anders aufgebaut. Da ein Objekt z.B. mit seinen abhängigen Objekten überwacht werden kann, werden Objekte mit ihren abhängigen Objekten zum überwachen übergeben.

Für jeden ÜberwachungsModus gibt es eine WatchModeListe, in der die Liste der abhängigen Objekte mit dem Überwachungstiefe abgelegt werden. Wenn ein Objekt mit einem bestimmten ÜberwachungsModus und Überwachungstiefe nicht mehr überwacht werden soll, wird die Liste aus der WatchModeListe genommen und die evtl. enthaltenen Objekte mit gleichem ÜberwachungsModus auch nicht mehr beobachtet.

Das ist Notwendig, weil z.B. ein Objekt 'A' mit einem referenzierten Objekt 'B' überwacht wird. Die Anwendung kann nun z.B. das referenzierte Objekt 'B' in Objekt 'A' dereferenzieren. Bei einee Aufhebung der Beobachtung von Objekt 'A' ist das früher referenzierte Objekt 'B' nicht mehr in der Basis verbunden und würde ansonsten nicht mehr freigegeben werden.

Wenn alle ÜberwachungsModuse auf 0 gesetzt sind, wird das CommunicatorNotifyModes-Objekt aus der jeweiligen Liste entfernt und gelöscht.

- CommunicatorClientNotifyModes
- CommunicatorIndexReadWriteNotifyModes
Objekte der Klassen CommunicatorClientNotifyModes und CommunicatorIndexReadWriteNotifyModes sind durch eine Referenz auf Communicator eindeutig.

Beispiele

Beispiel 1: Wenn z.B. ein AllSet überwacht werden soll, wird in der m_ClassWatchMap der ClassWatch mit gleicher ClassID gesucht. Wenn kein entsprechender ClassWatch vorhanden, wird ein solcher erstellt und in die m_ClassWatchMap gestellt.

Wenn ein ClassWatch vorhanden bzw. erstellt, wird in dessen Benachrichtigungs-Liste ein CommunicatorNotifyModes mit dem Communicator und seinem Index gesucht und dort der ÜberwachungsModus gesetzt, ansonsten ein neuer CommunicatorNotifyModes eingefügt.

Beispiel 2: Wenn z.B. ein Objekt überwacht werden soll, wird in der m_ClassWatchMap der ClassWatch mit gleicher ClassID gesucht. Wenn kein entsprechender ClassWatch vorhanden, wird ein solcher erstellt und in die m_ClassWatchMap gestellt.

Wenn ein ClassWatch vorhanden ist bzw. erstellt wird, wird in dessen ClassWatch::m_ObjectWatchMap der entsprechende ObjectWatch gesucht. Wenn kein entsprechendes ObjectWatch, wird ein solcher erstellt und in die ClassWatch::m_ObjectWatchMap gestellt.

Wenn ein ObjectWatch vorhanden ist bzw. erstellt wird, wird in dessen ObjectWatch::m_CommunicatorObjNotifyModesMap ein CommunicatorObjNotifyModes mit dem Communicator und seinem Index gesucht und dort der ÜberwachungsModus gesetzt, ansonsten ein neuer CommunicatorObjNotifyModes eingefügt.

Zusammenspiel mit glo::Manager

Benachrichtigungen werden nicht direkt vom glo::Manager initiiert, sondern über einen Auftrag an den WatchNotifyManager übergeben, welcher die Benachrichtigung übernimmt. Im Auftrag ist der Kommunikator, welcher die Benachrichtigung auslöst, der Auftragstyp (hier OrderMsg::ePROCESS_NOTIFY), die Aktion mit dem Auftragsgegenstand (eine Objekt-ID) in einem NotifyInfo und in ZusatzInfo ggf. ein Kommunikator.

Es wird im WatchNotifyManager geprüft, wer über die Aktion auf ein Objekt benachrichtigt werden möchte und ein Auftrag an diese (ausser in ZusatzInfo war ein Kommunikator, dann nur an diesen) wiederum über den glo::Manager versendet (dann Auftragstyp OrderMsg::eNOTIFY_CLIENT ).

Der Auftrag enthält den zu benachrichtigen Kommunikator, und in einer NotifyNote den Kommunikator welcher die Aktion auslöste, die betroffene Objekt-ID und die Aktion.

Siehe auch
Beobachten und benachrichtigen.
TdWatchNotifyMode
Autor
Helmut Jakoby

Beschreibung der Konstruktoren und Destruktoren

◆ WatchNotifyManager() [1/3]

glo::WatchNotifyManager::WatchNotifyManager ( )
protected

Der Standard-Konstruktor steht nicht zur Verfügung.

◆ WatchNotifyManager() [2/3]

glo::WatchNotifyManager::WatchNotifyManager ( Manager * pMyDBManager)

Konstruktor mit Parameterübergabe.

Parameter
[in]pMyDBManagerRückreferenz auf den besitzenden Manager, darf wärend der Lebensdauer dieses Objektes nicht aus dem Speicher entfernt werden.

◆ ~WatchNotifyManager()

virtual glo::WatchNotifyManager::~WatchNotifyManager ( )
virtual

Destruktor, es wird aufgeräumt.

◆ WatchNotifyManager() [3/3]

glo::WatchNotifyManager::WatchNotifyManager ( const WatchNotifyManager & )
private

Der Copy-Konstruktor steht nicht zur Verfügung.

Dokumentation der Elementfunktionen

◆ cancel()

virtual void glo::WatchNotifyManager::cancel ( )
overridevirtual

Wenn der Thread beendet wirde, wird diese virtuale Methode aufgerufen. Hier wird die MsgQueue aufgeräumt.

Zu beachten
Diese Methode gibt es nur, wenn nicht mit POSIX-Threads kompiliert (defined (__PTHREADS)).

Erneute Implementation von eut::RepeatingThread.

◆ deleteAllAction()

void glo::WatchNotifyManager::deleteAllAction ( Communicator * pCommunicator,
std::list< CommunicatorCallBackIndex * > & rActionList )
protected

Hilfsmethode für deleteCommunicatorWatches( OrderMsg * ).

Es werden alle Überwachungen des übergebenen Client-Kommunikatoren entfernt.

Es wird nur die übergebene Liste, von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können, berücksichtigt.

Parameter
[in]pCommunicatorDer Client-Kommunikator, dessen Überwachungen entfernt werden sollen.
[in,out]rActionListListe von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können.

◆ deleteCommunicatorWatches() [1/2]

void glo::WatchNotifyManager::deleteCommunicatorWatches ( Communicator * pCommunicator)

Verarbeitet einen Client-Kommunikator-Lösch-Auftrag aus seiner Queue mit den abzuarbeitenden Aufträgen.

Es werden alle Überwachungen des im Auftrag referenzierten Client-Kommunikator entfernt.

Es werden alle Liste, von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können, berücksichtigt.

Parameter
[in]pCommunicatorClient-Kommunikator.

◆ deleteCommunicatorWatches() [2/2]

void glo::WatchNotifyManager::deleteCommunicatorWatches ( OrderMsg * pOrderMsg)
protected

Verarbeitet einen Client-Kommunikator-Lösch-Auftrag aus seiner Queue mit den abzuarbeitenden Aufträgen.

Es werden alle Überwachungen des im Auftrag referenzierten Client-Kommunikator entfernt.

Es werden alle Liste, von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können, berücksichtigt.

Der ursprüngliche Auftrag wird aus dem Speicher entfernt.

Parameter
[in]pOrderMsgDer Auftrag.

◆ getClassWatch()

bool glo::WatchNotifyManager::getClassWatch ( ClassWatch *& prClassWatch,
unsigned long ulClassID,
bool bAlsoGenerate )
protected

Liefert in prClassWatch ein vorhandenes oder ein neues Überwachungsobjekt für einen AllSet mit übergebener Klassen-ID. Auf jeden Fall ist das zurückgelieferte Überwachungsobjekt in der m_ClassWatchMap.

Parameter
[in,out]prClassWatchDas vorhandene bzw. neue Überwachungsobjekt für den AllSet mit übergebener Klassen-ID.
[in]ulClassIDDie Klassen-ID.
[in]bAlsoGenerateWenn true, wird ein neues Überwachungsobjekt für AllSet dann generiert und in die m_ClassWatchMap eingefügt, wenn nicht schon vorhanden.
Wenn false, wird nur ein schon vorhandenes Überwachungsobjekt für AllSet geliefert.
Rückgabe
Wenn true, ist ein schon vorhandenes Überwachungsobjekt für AllSet geliefert wurden, ansonsten keines oder ein neues.

◆ hasObjectWatching()

bool glo::WatchNotifyManager::hasObjectWatching ( TdWatchNotifyMode tdWatchNotifyMode) const

Prüft ob Objekte mit übergebenen Beobachtungsmodus überwacht werden.

Rückgabe
Wenn 'true', dann wird mindestens ein objekt mit übergebenen Beobachtungsmodus überwacht.

◆ insertAction()

static void glo::WatchNotifyManager::insertAction ( CommunicatorCallBackIndex * pCommunicatorCallBackIndex,
std::list< CommunicatorCallBackIndex * > & rActionList )
staticprotected

Fügt einen CommunicatorCallBackIndex in übergebene Liste am Anfang ein.

Parameter
[in]pCommunicatorCallBackIndexEinzufügender CommunicatorCallBackIndex.
[in,out]rActionListDie Liste.

◆ operator=()

WatchNotifyManager & glo::WatchNotifyManager::operator= ( const WatchNotifyManager & )
private

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ processNotify() [1/2]

void glo::WatchNotifyManager::processNotify ( OrderMsg * pOrderMsg) const
protected

Verarbeitet einen Benachrichtigungs-Auftrag aus seiner Queue mit den abzuarbeitenden Aufträgen.

Es werden ggf. auch mehrere neue Benachrichtigungs-Aufträge erstellt und an die jeweiligen Client-Kommunikatoren versendet.

Es werden alle Listen, von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können, berücksichtigt.

Der ursprüngliche Auftrag wird aus dem Speicher entfernt.

Parameter
[in]pOrderMsgDer Auftrag.

◆ processNotify() [2/2]

void glo::WatchNotifyManager::processNotify ( OrderMsg * pOrderMsg,
std::list< CommunicatorCallBackIndex * > & rActionList ) const
protected

Verarbeitet einen Benachrichtigungs-Auftrag aus seiner Queue mit den abzuarbeitenden Aufträgen.

Es werden ggf. auch mehrere neue Benachrichtigungs-Aufträge erstellt und an die jeweiligen Client-Kommunikatoren versendet.

Es wird nur die übergebene Liste, von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können, berücksichtigt.

Der ursprüngliche Auftrag wird aus dem Speicher entfernt.

Parameter
[in]pOrderMsgDer Auftrag.
[in,out]rActionListListe von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über die einzelnen Aktionen benachrichtigt werden können.

◆ processObjectSetWatch()

int glo::WatchNotifyManager::processObjectSetWatch ( Communicator * pCommunicator,
const WatchSpecification & rWatchSpecification,
std::list< Manager::ObjIdWithDepends * > & rInputList )
protected

Verarbeitet eine Überwachung der übergebenen Objekte.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der überwachen möchte.
[in]rWatchSpecificationDer 'Beobachtungsmodus', die 'Beobachtungstiefe' und das 'Benachrichtigungsobjekt'.
[in]rInputListDie zu überwachenden Objektrecords.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ processObjectUnsetWatch()

int glo::WatchNotifyManager::processObjectUnsetWatch ( Communicator * pCommunicator,
const WatchSpecification & rWatchSpecification,
std::list< ObjID > & rInputList )
protected

Verarbeitet eine Überwachungsaufhebung der übergebenen Objekte.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der überwachen möchte.
[in]rWatchSpecificationDer 'Beobachtungsmodus', die 'Beobachtungstiefe' und das 'Benachrichtigungsobjekt'.
[in]rInputListDie zu Objekt-IDs der Objekte, deren Überwachung beendet werden soll.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ processWatch() [1/2]

int glo::WatchNotifyManager::processWatch ( const std::string & rsSchemaName,
Communicator * pCommunicator,
OrderMsg::EnOrderType eOrderType,
void * pOrderObject,
void * pAdditionalInfo )
protected

Verarbeitet eine Überwachungs- bzw. einen Überwachungsaufhebe-Auftrag.

Parameter
[in]rsSchemaNameDer Schemaname.
[in]pCommunicatorDer Client-Kommunikator, welcher die Überwachung initiieren bzw. aufheben möchte.
[in]eOrderTypeDer Typ der Überwachung.
[in]pOrderObjectJe nach eOrderType unterschiedlichen Typs oder auch nullptr.
[in]pAdditionalInfoDer 'Beobachtungsmodus', die 'Beobachtungstiefe' und das 'Benachrichtigungsobjekt' immer vom Typ WatchSpecification oder nullptr.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ processWatch() [2/2]

void glo::WatchNotifyManager::processWatch ( OrderMsg * pOrderMsg)
protected

Verarbeitet eine Überwachungs- bzw. einen Überwachungsaufhebe-Auftrag aus seiner Queue mit den abzuarbeitenden Aufträgen.

Es wird der Auftrag nach Verarbeitung und setzen der ggf. vorhandenen Ergebniswerte an den Kommunikator aus dem Auftrag zurückgegeben.

Parameter
[in]pOrderMsgDer Auftrag.

◆ removeAction()

static void glo::WatchNotifyManager::removeAction ( CommunicatorCallBackIndex * pCommunicatorCallBackIndex,
std::list< CommunicatorCallBackIndex * > & rActionList )
staticprotected

Entfernt einen CommunicatorCallBackIndex aus übergebene Liste.

Parameter
[in]pCommunicatorCallBackIndexZu entfernender CommunicatorCallBackIndex.
[in,out]rActionListDie Liste.

◆ removeClassWatch()

void glo::WatchNotifyManager::removeClassWatch ( unsigned long ulClassID)
protected

Entfernt und löscht das Überwachungsobjekt für den AllSet mit übergebener Klassen-ID aus m_ClassWatchMap.

Parameter
[in]ulClassIDDie Klassen-ID.

◆ setInternWatch() [1/3]

int glo::WatchNotifyManager::setInternWatch ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
const ObjID & rObjID,
std::map< ObjID, Record *, std::less< ObjID > > & rDependObjectsMap,
TdWatchNotifyMode tdWatchNotifyMode,
EnDeepMode eDeepMode )
protected

Registriert eine Überwachung für ein Objekt ggf. mit abhängigen Objekten.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der überwachen möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]rObjIDDie Objekt-ID des zu überwachenden Objekts.
[in]rDependObjectsMapDie abhängigen Objekte, welche von der aufrufenden Instanz 'mitüberwacht' werden.
[in]tdWatchNotifyModeDer gewünschte Überwachungsmodus.
[in]eDeepModeDer Überwachungstiefenmodus zum Auseinanderhalten der einzelnen DependentObjsWithDeepMode-Objekte.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ setInternWatch() [2/3]

int glo::WatchNotifyManager::setInternWatch ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
TdWatchNotifyMode tdWatchNotifyMode )
protected

Registriert eine Client-Anmelde, Client-Abmelde-, Lese-Index-, Schreibe-Index- oder Reindex-Überwachung.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der überwachen möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]tdWatchNotifyModeDer gewünschte Überwachungsmodus.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ setInternWatch() [3/3]

int glo::WatchNotifyManager::setInternWatch ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
unsigned long ulClassID,
TdWatchNotifyMode tdWatchNotifyMode )
protected

Registriert eine Überwachung für einen AllSet.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der überwachen möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]ulClassIDDie Klassen-ID des zu überwachenden AllSets.
[in]tdWatchNotifyModeDer gewünschte Überwachungsmodus.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ takeOrder()

void glo::WatchNotifyManager::takeOrder ( OrderMsg * pOrderMsg)

Übernimmt einen Auftrag.

Parameter
[in]pOrderMsgDer abzuarbeitende Auftrag.

◆ unsetInternWatch() [1/3]

int glo::WatchNotifyManager::unsetInternWatch ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
const ObjID & rObjID,
TdWatchNotifyMode tdWatchNotifyMode,
EnDeepMode eDeepMode,
bool bSimulate = false )
protected

Deregistriert eine Überwachung für ein Objekt ggf. mit abhängigen Objekten.

Parameter
[in]pCommunicatorDer Client-Kommunikator, welcher die Überwachung aufheben möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]rObjIDDie Objekt-ID des überwachten Objekts.
[in]tdWatchNotifyModeDer ursprüngliche aufzuhebende Überwachungsmodus.
[in]eDeepModeDer Überwachungstiefenmodus zum Auseinanderhalten der einzelnen DependentObjsWithDeepMode-Objekte.
[in]bSimulateWenn true, wird nur simuliert, also kein Wert gesetzt, aber ein Ergebnis bzw. Fehler geliefert.
Rückgabe
Eine Rückgabe > 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde; es existieren noch Überwachungsmodi in der Rückgabeanzahl.
Eine Rückgabe == 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde; es existieren KEINE weiteren Überwachungsmodi!
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ unsetInternWatch() [2/3]

int glo::WatchNotifyManager::unsetInternWatch ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
TdWatchNotifyMode tdWatchNotifyMode,
bool bSimulate = false )
protected

Deregistriert eine Client-An- und Abmelde-Überwachung oder eine Lese-Index-, Schreibe-Index- oder Reindex-Überwachung.

Parameter
[in]pCommunicatorDer Client-Kommunikator, welcher die Überwachung aufheben möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]tdWatchNotifyModeDer aufzuhebende Überwachungsmodus.
[in]bSimulateWenn true, wird nur simuliert, also kein Wert gesetzt, aber ein Ergebnis bzw. Fehler geliefert.
Rückgabe
Eine Rückgabe > 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde; es existieren noch Überwachungsmodi in der Rückgabeanzahl.
Eine Rückgabe == 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde; es existieren KEINE weiteren Überwachungsmodi!
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ unsetInternWatch() [3/3]

int glo::WatchNotifyManager::unsetInternWatch ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
unsigned long ulClassID,
TdWatchNotifyMode tdWatchNotifyMode,
bool bSimulate = false )
protected

Deregistriert eine Überwachung für einen AllSet.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der die Überwachung aufheben möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]ulClassIDDie Klassen-ID des überwachten AllSets.
[in]tdWatchNotifyModeDer aufzuhebende Überwachungsmodus.
[in]bSimulateWenn true, wird nur simuliert, also kein Wert gesetzt, aber ein Ergebnis bzw. Fehler geliefert.
Rückgabe
Eine Rückgabe > 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde; es existieren aber noch soviele Überwachungsmodi wie in der Rückgabeanzahl angegeben.
Eine Rückgabe == 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde und es keine weiteren Überwachungsmodi gibt!
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ unsetWatchDependObjects()

int glo::WatchNotifyManager::unsetWatchDependObjects ( Communicator * pCommunicator,
NUM_PTR ipCallBack,
std::stack< ObjID > & rDependObjIdStack,
TdWatchNotifyMode tdWatchNotifyMode,
bool bSimulate )
protected

Hilfsmethode um die Überwachungen abhängiger Objekte einzeln zu deregistrieren.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der die Überwachung aufheben möchte.
[in]ipCallBackDie Adresse der CallBack-Funktion des Client-Kommunikators.
[in]rDependObjIdStackListe von Objekt-IDs der überwachten abhängigen Objekte.
[in]tdWatchNotifyModeDer aufzuhebende Überwachungsmodus.
[in]bSimulateWenn true, wird nur simuliert, also kein Wert gesetzt, aber ein Ergebnis bzw. Fehler geliefert.
Rückgabe
Eine Rückgabe > 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde; es existieren aber noch soviele Überwachungsmodi wie in der Rückgabeanzahl angegeben.
Eine Rückgabe == 0 zeigt an, dass der Überwachungsmodus abgeschaltet wurde und es keine weiteren Überwachungsmodi gibt!
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ work()

virtual void glo::WatchNotifyManager::work ( )
overrideprotectedvirtual

Diese Methode wird als Thread ausgeführt. Es wird die Nachrichten-Queue nach Aufträgen und Antworten auf eigene Aufträge abgefragt (es wird 'geschlafen' bis eine Nachricht in die Queue gestellt wird).

Siehe auch
EuEndlessPThread, EuAPThread::work().

Implementiert eut::RepeatingThread.

Dokumentation der Datenelemente

◆ m_ClassWatchMap

std::unordered_map< unsigned long, ClassWatch * > glo::WatchNotifyManager::m_ClassWatchMap
private

Alle ClassWatch sortiert nach der Klassen-ID.

◆ m_ClientWatch

ClientWatch glo::WatchNotifyManager::m_ClientWatch
private

Fürs überwachen von Client-Anmeldung bzw. -Abmeldung.

◆ m_ExclusiveProcessingSection

eut::CriticalSection glo::WatchNotifyManager::m_ExclusiveProcessingSection
private

Wird benötigt, um folgende Methoden zu serialisieren:

◆ m_IndexReadWriteWatch

IndexReadWriteWatch glo::WatchNotifyManager::m_IndexReadWriteWatch
private

Fürs überwachen von Index einlesen bzw. schreiben und reindizieren sowie das Komprimieren einer Datenbank.

◆ m_iWNM_DELETE

int glo::WatchNotifyManager::m_iWNM_DELETE
private

Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.

So kann vor dem Versenden einer Benachrichtigung über eine erfolgte Änderung geprüft werden, ob eine Benachrichtigung notwendig ist.

◆ m_iWNM_INSERT

int glo::WatchNotifyManager::m_iWNM_INSERT
private

Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.

So kann vor dem Versenden einer Benachrichtigung über eine erfolgte Änderung geprüft werden, ob eine Benachrichtigung notwendig ist.

◆ m_iWNM_LOCK

int glo::WatchNotifyManager::m_iWNM_LOCK
private

Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.

So kann vor dem Versenden einer Benachrichtigung über eine erfolgte Änderung geprüft werden, ob eine Benachrichtigung notwendig ist.

◆ m_iWNM_UNLOCK

int glo::WatchNotifyManager::m_iWNM_UNLOCK
private

Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.

So kann vor dem Versenden einer Benachrichtigung über eine erfolgte Änderung geprüft werden, ob eine Benachrichtigung notwendig ist.

◆ m_iWNM_WRITE

int glo::WatchNotifyManager::m_iWNM_WRITE
private

Zur Steigerung der Performance werden die einzelnen Überwachungen gezählt.

So kann vor dem Versenden einer Benachrichtigung über eine erfolgte Änderung geprüft werden, ob eine Benachrichtigung notwendig ist.

◆ m_MsgQueue

std::queue< OrderMsg * > glo::WatchNotifyManager::m_MsgQueue
private

Die Queue mit den abzuarbeitenden Aufträgen.

◆ m_pMyDBManager

Manager* glo::WatchNotifyManager::m_pMyDBManager
private

Rückreferenz auf den besitzenden Manager.

◆ m_WNM_CLIENT_CLOSEBASE_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_CLIENT_CLOSEBASE_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Client-Abmelde-Aktionen an eine Datenbank benachrichtigt werden können.

◆ m_WNM_CLIENT_CONNECTSERVER_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_CLIENT_CONNECTSERVER_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Client-Anmelde-Aktionen an einen GloServer benachrichtigt werden können.

◆ m_WNM_CLIENT_DISCONNECTSERVER_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_CLIENT_DISCONNECTSERVER_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Client-Abmelde-Aktionen an einen GloServer benachrichtigt werden können.

◆ m_WNM_CLIENT_OPENBASE_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_CLIENT_OPENBASE_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Client-Anmelde-Aktionen an eine Datenbank benachrichtigt werden können.

◆ m_WNM_DELETE_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_DELETE_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Lösch-Aktionen auf AllSets und Objekte benachrichtigt werden können.

◆ m_WNM_INDEX_READ_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_INDEX_READ_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Lese-Index-Aktionen in einer Datenbank benachrichtigt werden können.

◆ m_WNM_INDEX_REINDEX_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_INDEX_REINDEX_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Reindex-Aktionen in einer Datenbank benachrichtigt werden können.

◆ m_WNM_INDEX_WRITE_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_INDEX_WRITE_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Schreibe-Index-Aktionen in einer Datenbank benachrichtigt werden können.

◆ m_WNM_INSERT_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_INSERT_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Einfüge-Aktionen auf AllSets benachrichtigt werden können.

◆ m_WNM_LOCK_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_LOCK_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Sperr-Aktionen auf AllSets und Objekte benachrichtigt werden können.

◆ m_WNM_UNLOCK_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_UNLOCK_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Entsperr-Aktionen auf AllSets und Objekte benachrichtigt werden können.

◆ m_WNM_WRITE_List

std::list<WatchNotifyManager::CommunicatorCallBackIndex *> glo::WatchNotifyManager::m_WNM_WRITE_List
staticprotected

Liste von Objekten des Typs CommunicatorCallBackIndex über welche die einzelnen Clients über Schreib-Aktionen auf AllSets und Objekte benachrichtigt werden können.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: