Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File 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.4 2005/01/21 19:44:15 mmarsh Exp $
00008 //
00009 // $Log: RoutedMessageEvent.h,v $
00010 // Revision 1.4  2005/01/21 19:44:15  mmarsh
00011 // Updated for compatibility with Doxygen 1.4.1
00012 //
00013 // Revision 1.3  2004/05/19 15:56:25  mmarsh
00014 // Added copyright and license statements.
00015 //
00016 // Revision 1.2  2003/11/04 22:31:46  mmarsh
00017 // *** empty log message ***
00018 //
00019 //
00020 
00021 #ifndef __CODEX_APSS_ROUTEDMESSAGEEVENT_H__
00022 #define __CODEX_APSS_ROUTEDMESSAGEEVENT_H__
00023 
00024 //#include "MessageEvent.h"
00025 #include "CODEX_Events/Event.h"
00026 #include "CODEX_Server/RoutingInfo.h"
00027 
00028 namespace CODEX_APSS
00029 {
00030    class RoutedMessageHandler;
00031 
00038    class RoutedMessageEventBase : public CODEX_Events::EventBase,
00039                                   public CODEX_Server::RoutingInfo
00040    {
00041       public :
00047          RoutedMessageEventBase( CODEX_Events::Activity* source,
00048                                  unsigned char* server,
00049                                  unsigned char* seqNum ) :
00050             CODEX_Events::EventBase( source ),
00051             CODEX_Server::RoutingInfo( server, seqNum )
00052          {}
00053 
00055          virtual ~RoutedMessageEventBase() {}
00056 
00058          virtual bool unmarshal( unsigned char ** pp, long length ) = 0;
00059    };
00060 
00065    template< class MT >
00066    class RoutedMessageEvent : public RoutedMessageEventBase
00067    {
00068       public :
00073          RoutedMessageEvent( CODEX_Events::Activity* source,
00074                              RoutedMessageHandler* destination,
00075                              unsigned char* server,
00076                              unsigned char* seqNum ) :
00077             RoutedMessageEventBase( source, server, seqNum ),
00078             m_destination( destination ),
00079             m_failed( false )
00080          {}
00081 
00083          virtual ~RoutedMessageEvent() {}
00084 
00085          bool handle() { return m_destination->handler( *this ); }
00086 
00088          void reRoute( RoutedMessageHandler* newDestination )
00089          {
00090             m_destination = newDestination;
00091          }
00092 
00094          const MT& message() const { return m_message; }
00095 
00097          bool failed() const { return m_failed; }
00098 
00100          void setFailed() { m_failed = true; }
00101 
00103          bool unmarshal( unsigned char ** pp, long length )
00104          {
00105             return ( 0 != m_message.unmarshal( 0, pp, length ) );
00106          }
00107 
00108       private :
00109          RoutedMessageHandler*  m_destination;
00110          MT                     m_message;
00111          bool                   m_failed;
00112    };
00113 
00114 }
00115 
00116 #endif /* __CODEX_APSS_ROUTEDMESSAGEEVENT_H__ */

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