Files
cdev-1.7.2n/extensions/cdevGenericServer/include/cdevMonitorTable.h
2022-12-13 12:44:04 +01:00

137 lines
5.1 KiB
C++

#ifndef _CDEV_MONITOR_TABLE_H_
#define _CDEV_MONITOR_TABLE_H_ 1
#include <cdevMessage.h>
#include <StringHash.h>
#include <cdevData.h>
#include <xdrClass.h>
// *****************************************************************************
// * class cdevMonitorData :
// * This class gives a cdevData object the capacity to selectively place
// * its tagged data items into an XDR stream.
// *****************************************************************************
class GENERIC_SERVER_API cdevMonitorData : public cdevData
{
protected:
int * criticalTags;
int criticalTagCnt;
virtual int isTagCritical ( int tag );
public:
cdevMonitorData (void );
cdevMonitorData (const cdevData & data);
cdevMonitorData (const cdevMonitorData & data);
virtual void setCriticalTags ( int * tags, int tagCnt );
virtual int changeTag ( int oldTag, int newTag );
virtual int xdrExport ( char ** buf, size_t * bufLen );
virtual int xdrExport ( char * buf, size_t bufLen, size_t count);
virtual int xdrSize ( size_t * bufLen, size_t * elementCount );
};
// *****************************************************************************
// * class cdevMonitorNode :
// * This class is used to store the list of monitors associated with a
// * device / attribute pair. It maintains a back-pointer to the
// * cdevMonitorTable object to allow it to call the fireCallback method of
// * the parent in order to submit the reply.
// *****************************************************************************
class GENERIC_SERVER_API cdevMonitorNode
{
friend class cdevMonitorTable;
protected:
// **********************************************************************
// * class cdevMonitorEntry :
// * This is an individual monitor transaction that has been installed
// * in a cdevMonitorNode.
// **********************************************************************
class cdevMonitorEntry
{
friend class cdevMonitorNode;
private:
static int VALUE_TAG;
static int STATUS_TAG;
static int TIME_TAG;
static int DEVICE_TAG; // *** Added for multi-device
cdevMonitorEntry * next;
cdevMessage * message;
int * triggers;
int * trigType;
int trigCnt;
int * properties;
int propCnt;
int deviceIdx; // *** Added for multi-device
cdevMonitorEntry ( cdevMessage * Message, int deviceIdx );
~cdevMonitorEntry ( void );
};
class cdevMonitorTable * parent;
cdevMonitorEntry * nodes;
cdevMonitorData mData;
char * hashString;
virtual int fireMonitor ( cdevMonitorEntry *entry,
int property,
cdevMonitorData * data,
int endOfTransaction = 0);
virtual int insertMonitor ( cdevMessage * request,
cdevData * data,
int deviceIdx );
virtual int removeMonitor ( cdevMessage * request );
virtual int removeMonitor ( unsigned transIndex );
virtual int removeClientMonitors ( short clientID, int fire = 1 );
char * getHashString ( void ) { return hashString; }
public:
cdevMonitorNode ( cdevMonitorTable * Parent,
char * Device,
char * Attrib );
virtual ~cdevMonitorNode ( void );
virtual int fireMonitor ( char * property, cdevData * data );
virtual int fireMonitor ( int property, cdevData * data );
int isMonitored ( void ) { return nodes==NULL?0:1; }
};
// *****************************************************************************
// * class cdevMonitorTable :
// * This class is used to store the list of all monitors for all device /
// * attribute pairs in the system. The developer must provide the
// * fireCallback method which will be used to submit the callback to the
// * client.
// *****************************************************************************
class GENERIC_SERVER_API cdevMonitorTable
{
protected:
StringHash monitors;
public:
cdevMonitorTable ( void );
virtual ~cdevMonitorTable ( void );
virtual int insertMonitor ( cdevMessage * request, cdevData * data );
virtual int insertMonitor ( cdevMessage * request, cdevData ** data, size_t dataCnt );
virtual int removeMonitor ( cdevMessage * request );
virtual int removeClientMonitors( short clientID, int fire = 1 );
virtual cdevMonitorNode * findMonitor ( char * device, char * attrib );
virtual int fireMonitor ( char * device, char * attrib,
char * property, cdevData * data );
virtual int fireMonitor ( char * device, char * attrib,
int property, cdevData * data );
virtual int fireCallback ( cdevMessage * message );
};
#endif