Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   Related Pages  

RoutedMessageEvent.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: RoutedMessageEvent.h,v 1.3 2004/05/19 15:56:25 mmarsh Exp $
00008 //
00009 // $Log: RoutedMessageEvent.h,v $
00010 // Revision 1.3  2004/05/19 15:56:25  mmarsh
00011 // Added copyright and license statements.
00012 //
00013 // Revision 1.2  2003/11/04 22:31:46  mmarsh
00014 // *** empty log message ***
00015 //
00016 //
00017 
00018 #ifndef __CODEX_APSS_ROUTEDMESSAGEEVENT_H__
00019 #define __CODEX_APSS_ROUTEDMESSAGEEVENT_H__
00020 
00021 //#include "MessageEvent.h"
00022 #include "CODEX_Events/Event.h"
00023 #include "CODEX_Server/RoutingInfo.h"
00024 
00025 namespace CODEX_APSS
00026 {
00027    class RoutedMessageHandler;
00028 
00035    class RoutedMessageEventBase : public CODEX_Events::EventBase,
00036                                   public CODEX_Server::RoutingInfo
00037    {
00038       public :
00044          RoutedMessageEventBase( CODEX_Events::Activity* source,
00045                                  unsigned char* server,
00046                                  unsigned char* seqNum ) :
00047             CODEX_Events::EventBase( source ),
00048             CODEX_Server::RoutingInfo( server, seqNum )
00049          {}
00050 
00052          virtual ~RoutedMessageEventBase() {}
00053 
00055          virtual bool unmarshal( unsigned char ** pp, long length ) = 0;
00056    };
00057 
00062    template< class MT >
00063    class RoutedMessageEvent : public RoutedMessageEventBase
00064    {
00065       public :
00070          RoutedMessageEvent( CODEX_Events::Activity* source,
00071                              RoutedMessageHandler* destination,
00072                              unsigned char* server,
00073                              unsigned char* seqNum ) :
00074             RoutedMessageEventBase( source, server, seqNum ),
00075             m_destination( destination ),
00076             m_failed( false )
00077          {}
00078 
00080          virtual ~RoutedMessageEvent() {}
00081 
00082          bool handle() { return m_destination->handler( *this ); }
00083 
00085          void reRoute( RoutedMessageHandler* newDestination )
00086          {
00087             m_destination = newDestination;
00088          }
00089 
00091          const MT& message() const { return m_message; }
00092 
00094          bool failed() const { return m_failed; }
00095 
00097          void setFailed() { m_failed = true; }
00098 
00100          bool unmarshal( unsigned char ** pp, long length )
00101          {
00102             return ( 0 != m_message.unmarshal( 0, pp, length ) );
00103          }
00104 
00105       private :
00106          RoutedMessageHandler*  m_destination;
00107          MT                     m_message;
00108          bool                   m_failed;
00109    };
00110 
00111 }
00112 
00113 #endif /* __CODEX_APSS_ROUTEDMESSAGEEVENT_H__ */

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