#ifndef _CDEV_MESSAGE_H_ #define _CDEV_MESSAGE_H_ 1 #include #include #include class GENERIC_SERVER_API cdevMessage : public cdevPacket { private: typedef union { unsigned char rawData; struct { unsigned char saveDeviceList : 1; unsigned char saveMessage : 1; unsigned char saveData : 1; unsigned char saveContext : 1; unsigned char saveTagMap : 1; unsigned pad : 3; } value; } SaveTable; SaveTable saveTbl; short clientID; unsigned transIndex; unsigned cancelTransIndex; unsigned localDataIndex; unsigned foreignDataIndex; unsigned operationCode; int completionCode; unsigned deviceCount; char ** deviceList; char * message; cdevData * data; cdevData * context; cdevData * tagMap; public: enum { CDEV_PACKET_VERSION = cdevMessageBinary::CDEV_PACKET_VERSION }; static cdevPacket *import( cdevPacketBinary & ); cdevMessage ( short ClientID = -1, unsigned TransIndex = 0, unsigned CancelTransIndex = 0, unsigned LocalDataIndex = 0, unsigned ForeignDataIndex = 0, unsigned OperationCode = 0, int CompletionCode = 0, unsigned DeviceCount = 0, char ** DeviceList = NULL, char * Message = NULL, cdevData * Data = NULL, cdevData * Context = NULL, cdevData * TagMap = NULL); cdevMessage ( char * binary, size_t binaryLen ); cdevMessage ( class cdevMessage & message ); virtual ~cdevMessage ( void ); virtual void clear ( void ); virtual int streamIn ( char * binary, size_t binaryLen ); virtual int streamOut ( char ** binary, size_t * binaryLen ); virtual void asciiDump ( FILE * fp = stdout ); virtual short getVersion ( void ) { return CDEV_PACKET_VERSION; } virtual short getClientID ( void ) { return clientID; } virtual unsigned getTransIndex ( void ) { return transIndex; } unsigned getCancelTransIndex ( void ) { return cancelTransIndex; } unsigned getLocalDataIndex ( void ) { return localDataIndex; } unsigned getForeignDataIndex ( void ) { return foreignDataIndex; } unsigned getOperationCode ( void ) { return operationCode; } int getCompletionCode ( void ) { return completionCode; } unsigned getDeviceCount ( void ) { return deviceCount; } char ** getDeviceList ( void ) { return deviceList; } char * getMessage ( void ) { return message; } cdevData * getData ( void ) { return data; } cdevData * getContext ( void ) { return context; } cdevData * getTagMap ( void ) { return tagMap; } virtual void setClientID ( short ClientID ) { clientID = ClientID; } virtual void setTransIndex( unsigned TransIndex ) { transIndex = TransIndex; } void setCancelTransIndex ( unsigned CancelTransIndex ) { cancelTransIndex = CancelTransIndex; } void setLocalDataIndex ( unsigned LocalDataIndex ) { localDataIndex = LocalDataIndex; } void setForeignDataIndex ( unsigned ForeignDataIndex ) { foreignDataIndex = ForeignDataIndex; } void setOperationCode ( unsigned OperationCode ) { operationCode = OperationCode; } void setCompletionCode ( int CompletionCode ) { completionCode = CompletionCode; } void setDeviceList ( char ** DeviceList, int DeviceCount, int permanent = 0 ) { if(deviceList!=NULL && !saveTbl.value.saveDeviceList) { for(int i=0; i