Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound 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.3 2004/05/19 15:56:51 mmarsh Exp $
00008 //
00009 // $Log: ClientMessageEvent.h,v $
00010 // Revision 1.3  2004/05/19 15:56:51  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:31:48  mmarsh
00014 // *** empty log message ***
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 //#include "CODEX_Client/Message.h"
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 /* __CODEX_KEYSERVICE_CLIENT_MESSAGE_EVENT_H__ */

Generated on Wed Jun 2 16:32:54 2004 for COrnell Data EXchange (CODEX) by doxygen1.2.18