00001 /* -*- mode: c++; c-basic-offset: 4; -*- */ 00002 #ifndef LMSG_MSGHANDLER_HH 00003 #define LMSG_MSGHANDLER_HH 00004 // 00005 // Base class for server message handlers. 00006 // 00007 00008 #include "lmsg/MsgTypes.hh" 00009 00010 namespace lmsg { 00011 00012 class MsgHeader; 00013 class Message; 00014 class AppServer; 00015 class Buffer; 00016 00017 00025 class MsgHandler { 00026 public: 00030 MsgHandler(void); 00031 00036 virtual ~MsgHandler(void); 00037 00042 error_type handleBuffer(AppServer& app, Buffer& buf); 00043 00047 virtual error_type handleMsg(AppServer& app, const MsgHeader& hdr) = 0; 00048 00051 virtual Message& getMessage(void) = 0; 00052 private: 00053 }; 00054 00064 template<class Msg> 00065 class Handler : public MsgHandler { 00066 public: 00067 00071 Handler(void); 00072 00076 ~Handler(void); 00077 00084 error_type handleMsg(AppServer& app, const MsgHeader& hdr); 00085 00090 Msg& getMessage(void); 00091 00096 const Msg& getMessage(void) const; 00097 00098 private: 00099 Msg mMessage; 00100 }; 00101 00102 } // namespace lmsg 00103 00104 //-------------------------------------- Default constructor 00105 template<class Msg> 00106 lmsg::Handler<Msg>::Handler(void) { 00107 } 00108 00109 //-------------------------------------- Default destructor 00110 template<class Msg> 00111 lmsg::Handler<Msg>::~Handler(void) { 00112 } 00113 00114 //-------------------------------------- Get the scratch message 00115 template<class Msg> 00116 Msg& 00117 lmsg::Handler<Msg>::getMessage(void) { 00118 return mMessage; 00119 } 00120 00121 template<class Msg> 00122 const Msg& 00123 lmsg::Handler<Msg>::getMessage(void) const { 00124 return mMessage; 00125 } 00126 00127 00128 #endif // LMSG_MSGHANDLER_HH 00129 00130
1.5.4