Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ClientMessageEvent.h

00001 /*
00002  * Copyright 2003 Michael A. Marsh, Cornell University. All rights reserved.
00003  * This software is released under the modified BSD license.
00004  * See the file LICENSE in the top-level directory for details.
00005  */
00006 //
00007 // $Id: ClientMessageEvent.h,v 1.4 2005/01/21 19:44:16 mmarsh Exp $
00008 //
00009 // $Log: ClientMessageEvent.h,v $
00010 // Revision 1.4  2005/01/21 19:44:16  mmarsh
00011 // Updated for compatibility with Doxygen 1.4.1
00012 //
00013 // Revision 1.3  2004/05/19 15:56:51  mmarsh
00014 // *** empty log message ***
00015 //
00016 // Revision 1.2  2003/11/04 22:31:48  mmarsh
00017 // *** empty log message ***
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 //#include "CODEX_Client/Message.h"
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 /* __CODEX_KEYSERVICE_CLIENT_MESSAGE_EVENT_H__ */

Generated on Fri May 6 17:38:36 2005 for COrnell Data EXchange (CODEX) by  doxygen 1.4.1