00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __CODEX_KEYSERVICE_CLIENT_MESSAGE_EVENT_H__
00022 #define __CODEX_KEYSERVICE_CLIENT_MESSAGE_EVENT_H__
00023
00024 #include "CODEX_Events/Event.h"
00025
00026
00027 namespace CODEX_KeyService
00028 {
00029 class ClientMessageHandler;
00030
00037 class ClientMessageEventBase : public CODEX_Events::EventBase
00038 {
00039 public :
00044 ClientMessageEventBase( CODEX_Events::Activity* source ) :
00045 CODEX_Events::EventBase( source )
00046 {}
00047
00049 virtual ~ClientMessageEventBase() {}
00050
00052 virtual bool unmarshal( unsigned char ** pp, long length ) = 0;
00053 };
00054
00061 template< class MT >
00062 class ClientMessageEvent : public ClientMessageEventBase
00063 {
00064 public :
00066 ClientMessageEvent( CODEX_Events::Activity* source,
00067 ClientMessageHandler* destination ) :
00068 ClientMessageEventBase( source ),
00069 m_destination( destination )
00070 {}
00071
00073 ClientMessageEvent( CODEX_Events::Activity* source,
00074 ClientMessageHandler* destination,
00075 const MT& message ) :
00076 ClientMessageEventBase( source ),
00077 m_message( message ),
00078 m_destination( destination )
00079 {}
00080
00082 virtual ~ClientMessageEvent() {}
00083
00085 ClientMessageHandler* destination() const { return m_destination; }
00086
00088 const MT& message() const { return m_message; }
00089
00094 bool handle() { return m_destination->handler( *this ); }
00095
00103 void reRoute( ClientMessageHandler* newDestination )
00104 {
00105 m_destination = newDestination;
00106 }
00107
00109 bool unmarshal( unsigned char ** pp, long length )
00110 {
00111 if ( NULL == m_message.unmarshal( NULL, pp, length ) )
00112 {
00113 return false;
00114 }
00115 return true;
00116 }
00117
00118 private :
00119 MT m_message;
00120
00121 protected :
00123 ClientMessageHandler* m_destination;
00124 };
00125 }
00126
00127 #endif