version 1.2, 2001/07/08 23:39:09
|
version 1.5.2.5, 2001/08/20 02:37:39
|
|
|
#define Pegasus_Message_h | #define Pegasus_Message_h |
| |
#include <iostream> | #include <iostream> |
|
#include <cstring> |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
|
#include <Pegasus/Common/Exception.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
The Message class also provides previous and next pointers which are | The Message class also provides previous and next pointers which are |
used to place the messages on a queue by the MessageQueue class. | used to place the messages on a queue by the MessageQueue class. |
*/ | */ |
class Message |
class PEGASUS_COMMON_LINKAGE Message |
{ | { |
public: | public: |
| |
|
|
| |
static Uint32 getNextKey() { return ++_nextKey; } | static Uint32 getNextKey() { return ++_nextKey; } |
| |
virtual void print( |
virtual void print(PEGASUS_STD(ostream)& os) const; |
PEGASUS_STD(ostream)& os, |
|
Boolean printHeader = true) const; |
|
| |
private: | private: |
Uint32 _type; | Uint32 _type; |
|
|
friend class MessageQueue; | friend class MessageQueue; |
}; | }; |
| |
|
enum MessageType |
|
{ |
|
DUMMY_MESSAGE, |
|
|
|
// CIM Message types: |
|
|
|
CIM_GET_CLASS_REQUEST_MESSAGE, |
|
CIM_GET_INSTANCE_REQUEST_MESSAGE, |
|
CIM_DELETE_CLASS_REQUEST_MESSAGE, |
|
CIM_DELETE_INSTANCE_REQUEST_MESSAGE, |
|
CIM_CREATE_CLASS_REQUEST_MESSAGE, |
|
CIM_CREATE_INSTANCE_REQUEST_MESSAGE, |
|
CIM_MODIFY_CLASS_REQUEST_MESSAGE, |
|
CIM_MODIFY_INSTANCE_REQUEST_MESSAGE, |
|
CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE, |
|
CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE, |
|
CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE, |
|
CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE, |
|
CIM_EXEC_QUERY_REQUEST_MESSAGE, |
|
CIM_ASSOCIATORS_REQUEST_MESSAGE, |
|
CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE, |
|
CIM_REFERENCES_REQUEST_MESSAGE, |
|
CIM_REFERENCE_NAMES_REQUEST_MESSAGE, |
|
CIM_GET_PROPERTY_REQUEST_MESSAGE, |
|
CIM_SET_PROPERTY_REQUEST_MESSAGE, |
|
CIM_GET_QUALIFIER_REQUEST_MESSAGE, |
|
CIM_SET_QUALIFIER_REQUEST_MESSAGE, |
|
CIM_DELETE_QUALIFIER_REQUEST_MESSAGE, |
|
CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE, |
|
CIM_INVOKE_METHOD_REQUEST_MESSAGE, |
|
CIM_GET_CLASS_RESPONSE_MESSAGE, |
|
CIM_GET_INSTANCE_RESPONSE_MESSAGE, |
|
CIM_DELETE_CLASS_RESPONSE_MESSAGE, |
|
CIM_DELETE_INSTANCE_RESPONSE_MESSAGE, |
|
CIM_CREATE_CLASS_RESPONSE_MESSAGE, |
|
CIM_CREATE_INSTANCE_RESPONSE_MESSAGE, |
|
CIM_MODIFY_CLASS_RESPONSE_MESSAGE, |
|
CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE, |
|
CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE, |
|
CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE, |
|
CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE, |
|
CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE, |
|
CIM_EXEC_QUERY_RESPONSE_MESSAGE, |
|
CIM_ASSOCIATORS_RESPONSE_MESSAGE, |
|
CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE, |
|
CIM_REFERENCES_RESPONSE_MESSAGE, |
|
CIM_REFERENCE_NAMES_RESPONSE_MESSAGE, |
|
CIM_GET_PROPERTY_RESPONSE_MESSAGE, |
|
CIM_SET_PROPERTY_RESPONSE_MESSAGE, |
|
CIM_GET_QUALIFIER_RESPONSE_MESSAGE, |
|
CIM_SET_QUALIFIER_RESPONSE_MESSAGE, |
|
CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE, |
|
CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE, |
|
CIM_INVOKE_METHOD_RESPONSE_MESSAGE, |
|
|
|
// Monitor-related messages: |
|
|
|
SOCKET_MESSAGE, |
|
|
|
// Connection-oriented messages: |
|
|
|
CLOSE_CONNECTION_MESSAGE, |
|
|
|
// HTTP messages: |
|
|
|
HTTP_MESSAGE, |
|
|
|
NUMBER_OF_MESSAGES |
|
}; |
|
|
|
PEGASUS_COMMON_LINKAGE const char* MessageTypeToString(Uint32 messageType); |
|
|
|
/** This class implements a stack of queue-ids. Many messages must keep a |
|
stack of queue-ids of queues which they must be returned to. This provides |
|
a light efficient stack for this purpose. |
|
*/ |
|
class QueueIdStack |
|
{ |
|
public: |
|
|
|
QueueIdStack() : _size(0) |
|
{ |
|
} |
|
|
|
QueueIdStack(const QueueIdStack& x) : _size(x._size) |
|
{ |
|
memcpy(_items, x._items, sizeof(_items)); |
|
} |
|
|
|
PEGASUS_EXPLICIT QueueIdStack(Uint32 x) : _size(0) |
|
{ |
|
push(x); |
|
} |
|
|
|
PEGASUS_EXPLICIT QueueIdStack(Uint32 x1, Uint32 x2) : _size(0) |
|
{ |
|
push(x1); |
|
push(x2); |
|
} |
|
|
|
~QueueIdStack() |
|
{ |
|
} |
|
|
|
QueueIdStack& operator=(const QueueIdStack& x) |
|
{ |
|
if (this != &x) |
|
{ |
|
memcpy(_items, x._items, sizeof(_items)); |
|
_size = x._size; |
|
} |
|
return *this; |
|
} |
|
|
|
Uint32 size() const |
|
{ |
|
return _size; |
|
} |
|
|
|
Boolean isEmpty() const |
|
{ |
|
return _size == 0; |
|
} |
|
|
|
void push(Uint32 x) |
|
{ |
|
if (_size == MAX_SIZE) |
|
throw StackOverflow(); |
|
|
|
_items[_size++] = x; |
|
} |
|
|
|
Uint32& top() |
|
{ |
|
if (_size == 0) |
|
throw StackUnderflow(); |
|
|
|
return _items[_size-1]; |
|
} |
|
|
|
Uint32 top() const |
|
{ |
|
return ((QueueIdStack*)this)->top(); |
|
} |
|
|
|
void pop() |
|
{ |
|
if (_size == 0) |
|
throw StackUnderflow(); |
|
|
|
_size--; |
|
} |
|
|
|
/** Make a copy of this stack and then pop the top element. */ |
|
QueueIdStack copyAndPop() const |
|
{ |
|
return QueueIdStack(*this, 0); |
|
} |
|
|
|
private: |
|
|
|
// Copy the given stack but then pop the top element: |
|
QueueIdStack(const QueueIdStack& x, int) : _size(x._size) |
|
{ |
|
memcpy(_items, x._items, sizeof(_items)); |
|
pop(); |
|
} |
|
|
|
enum { MAX_SIZE = 5 }; |
|
Uint32 _items[MAX_SIZE]; |
|
Uint32 _size; |
|
}; |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |
#endif /* Pegasus_Message_h */ | #endif /* Pegasus_Message_h */ |