00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __CODEX_KEYSERVICE_CLIENT_MESSAGE_EVENT_H__
00019 #define __CODEX_KEYSERVICE_CLIENT_MESSAGE_EVENT_H__
00020
00021 #include "CODEX_Events/Event.h"
00022
00023
00024 namespace CODEX_KeyService
00025 {
00026 class ClientMessageHandler;
00027
00034 class ClientMessageEventBase : public CODEX_Events::EventBase
00035 {
00036 public :
00041 ClientMessageEventBase( CODEX_Events::Activity* source ) :
00042 CODEX_Events::EventBase( source )
00043 {}
00044
00046 virtual ~ClientMessageEventBase() {}
00047
00049 virtual bool unmarshal( unsigned char ** pp, long length ) = 0;
00050 };
00051
00058 template< class MT >
00059 class ClientMessageEvent : public ClientMessageEventBase
00060 {
00061 public :
00063 ClientMessageEvent( CODEX_Events::Activity* source,
00064 ClientMessageHandler* destination ) :
00065 ClientMessageEventBase( source ),
00066 m_destination( destination )
00067 {}
00068
00070 ClientMessageEvent( CODEX_Events::Activity* source,
00071 ClientMessageHandler* destination,
00072 const MT& message ) :
00073 ClientMessageEventBase( source ),
00074 m_message( message ),
00075 m_destination( destination )
00076 {}
00077
00079 virtual ~ClientMessageEvent() {}
00080
00082 ClientMessageHandler* destination() const { return m_destination; }
00083
00085 const MT& message() const { return m_message; }
00086
00091 bool handle() { return m_destination->handler( *this ); }
00092
00100 void reRoute( ClientMessageHandler* newDestination )
00101 {
00102 m_destination = newDestination;
00103 }
00104
00106 bool unmarshal( unsigned char ** pp, long length )
00107 {
00108 if ( NULL == m_message.unmarshal( NULL, pp, length ) )
00109 {
00110 return false;
00111 }
00112 return true;
00113 }
00114
00115 private :
00116 MT m_message;
00117
00118 protected :
00120 ClientMessageHandler* m_destination;
00121 };
00122 }
00123
00124 #endif