Main Page   Class Hierarchy   Compound List   File List   Compound Members  

tcallbck.h

00001 /*
00002  * Copyright (c) 1991-2006 TIBCO Software Inc.
00003  * All rights reserved.
00004  * For more information, please contact:
00005  * TIBCO Software Inc., Palo Alto, California, USA
00006  *
00007  * $Id: //dev/packages/tpsi/cpsi/dev/68/src/rtworks/tcallbck.h#1 $
00008  */
00009 
00010 #ifndef _T_CALLBACK_HH_
00011 #define _T_CALLBACK_HH_
00012 
00013 #include <rtworks/types.h>
00014 #include <rtworks/tex.h>
00015 
00016 
00017 
00018 namespace SmartSockets {
00019 
00020   class T_IPCX_API TipcConn;
00021   class T_IPCX_API TipcMsg;
00022   class T_IPCX_API TipcSrv;
00023 
00024 
00031   class T_IPCX_CB_API CallBackException : public Exception 
00032   {
00033   public:
00037     CallBackException() {}
00038 
00039 /* Anticipation of a more functional exception class
00040     CallBackException( int4 ssErrNum = 0, 
00041                        int4 osErrNum = 0,
00042                        int4 socketErrNum = 0,
00043                        int4 cErrNum = 0)
00044                        : Exception (ssErrNum, osErrNum, socketErrNum, cErrNum)
00045     {
00046     }
00047 */
00048 
00052     virtual ~CallBackException() throw()
00053     {
00054     }
00055   };
00056 
00057 
00065   template <class Implementor>
00066   class T_IPCX_CB_API CallBack 
00067   {
00068     friend class T_IPCX_API TipcSrv;
00069     friend class T_IPCX_API TipcConn;
00070     friend class T_IPCX_API Option;
00071 
00072   public:
00073 
00080     void destroy() throw (CallBackException) 
00081     {
00082       if (is_created()) 
00083       {
00084         if (!TutCbDestroy(m_cb))
00085         {
00086           throw CallBackException();
00087         }
00088 
00089         m_cb = 0;
00090       }
00091 
00092       delete this;
00093     }
00094 
00095    
00101     bool is_created() throw () 
00102     {
00103       return 0 != m_cb;
00104     }
00105 
00106 
00112     operator T_CB () throw () 
00113     {
00114       return m_cb;
00115     }
00116 
00117 
00123     void * getArgument () const throw ()
00124     {
00125       return m_argument;
00126     }
00127 
00128 
00134     void setArgument (void* data) throw ()
00135     {
00136       m_argument = data;
00137     }
00138 
00139 
00145     T_CB_PRIORITY getPriority () const throw (CallBackException) 
00146     {
00147       T_CB_PRIORITY result;
00148 
00149       if (!TutCbGetPriority (m_cb, &result)) 
00150       {
00151         throw CallBackException ();
00152       }
00153 
00154       return result;
00155     }
00156 
00157     
00163     void setPriority (T_CB_PRIORITY priority) throw (CallBackException) 
00164     {
00165       if (!TutCbSetPriority (m_cb, priority)) 
00166       {
00167         throw CallBackException ();
00168       }
00169     }
00170 
00171 
00177     virtual bool print (T_OUT_FUNC func = (T_OUT_FUNC)TutOut) 
00178                                                 throw (CallBackException) 
00179     {
00180       TutCbPrint(m_cb, func);
00181       return T_TRUE;
00182     }
00183 
00184   protected:
00185     /* 
00186      * The callback structure underlying this object
00187      */
00188     T_CB m_cb; 
00189 
00190     /*
00191      * The call back implementing class.
00192      */
00193     Implementor * m_implementor;  
00194    
00195     /*
00196      * The callback handling method within the implementing class.
00197      */
00198     typename Implementor::Handler m_handler; 
00199                                       
00200     /*
00201      * The argument data for this object.
00202      */
00203     void * m_argument;
00204 
00205 
00211     void setTCB (T_CB handle)
00212     {
00213       m_cb = handle;
00214     }
00215 
00216   private:
00223     CallBack (Implementor * implementor,
00224               typename Implementor::Handler handler)
00225       : m_cb (0)
00226       , m_implementor (implementor)
00227       , m_handler (handler)
00228       , m_argument(0)
00229     { 
00230     }
00231 
00235     virtual ~CallBack () throw()
00236     {
00237     }
00238 
00244     CallBack (const CallBack & callback)
00245     {
00246     }
00247   };
00248 
00249 
00256   class T_IPCX_CB_API ConnectionCallBack
00257   {      
00258   public:
00259     enum ConnStatus
00260     {
00261       none,/* not connected at all */
00262       warm,/* warm connection to RTserver */
00263       full /* full connection to RTserver */
00264     };
00265 
00266     typedef void (ConnectionCallBack::* Handler) (
00267       CallBack < ConnectionCallBack > * callBack,
00268       TipcSrv & connection,
00269       ConnStatus oldConnStatus,
00270       ConnStatus newConnStatus);
00271 
00275     ConnectionCallBack () {}
00276 
00280     virtual ~ConnectionCallBack ()  throw() {}
00281 
00282 
00292     virtual void onConnection (
00293       CallBack < ConnectionCallBack > * callBack,
00294       TipcSrv & connection,
00295       ConnStatus oldConnStatus,
00296       ConnStatus newConnStatus); 
00297 
00298   };
00299 
00300 
00308   class T_IPCX_CB_API MessageCallBack
00309   {
00310   public:
00311     typedef void (MessageCallBack::* Handler) (
00312                               CallBack <MessageCallBack> * callBack,
00313                               TipcMsg & message,
00314                               TipcConn & connection);
00315 
00319     MessageCallBack () {}
00320                        
00321 
00325     virtual ~MessageCallBack () throw() {}
00326 
00327 
00336     virtual void onMessage (CallBack<MessageCallBack>* callback,
00337                             TipcMsg & msg,
00338                             TipcConn & conn); 
00339 
00340 /*
00341     static void dispatchCreateMsgDelegator (T_IPC_DISPATCHER_EVENT event,
00342                                             void * data,
00343                                             void * arg);
00344 */
00345 /*
00346     static void connMsgDelegator (T_IPC_CONN conn, 
00347                                   T_IPC_CONN_MSG_CB_DATA data, 
00348                                   T_CB_ARG arg);
00349 */
00350 
00351   };
00352 
00353 
00360   class T_IPCX_CB_API ErrorCallBack
00361   {      
00362   public:
00363     typedef void (ErrorCallBack::* Handler) (
00364       CallBack < ErrorCallBack > * callBack,
00365       Exception & error,
00366       TipcConn & conn);
00367 
00368 
00372     ErrorCallBack() {}
00373 
00374 
00378     virtual ~ErrorCallBack() throw() {}
00379 
00380 
00389     virtual void onError (
00390       CallBack <ErrorCallBack> * callBack,
00391       Exception & error,
00392       TipcConn & conn); 
00393   };
00394 
00395 
00402   class T_IPCX_CB_API MessageQueueCallBack
00403   {
00404   public:
00405     typedef void (MessageQueueCallBack::* Handler) (
00406                                  CallBack <MessageQueueCallBack> * callBack,
00407                                  TipcMsg & message,
00408                                  TipcConn & connection,
00409                                  uint4 queuePos,
00410                                  bool is_insert);
00411 
00415     MessageQueueCallBack() {}
00416 
00420     virtual ~MessageQueueCallBack () throw() {}
00421 
00433     virtual void onMessage (CallBack <MessageQueueCallBack> * callBack,
00434                             TipcMsg & message,
00435                             TipcConn & connection,
00436                             uint4 queuePos,
00437                             bool is_insert); 
00438   };
00439 
00440 
00441 
00448   class T_IPCX_CB_API EncodeCallBack
00449   {
00450   public:
00451     typedef void (EncodeCallBack::* Handler) ( 
00452                                       CallBack <EncodeCallBack> * callBack,
00453                                       void * packet,
00454                                       int4 packetSize,
00455                                       void * origPacket,
00456                                       int4 origPacketSize,
00457                                       TipcMsg & origMessage,
00458                                       TipcConn & connection);
00459 
00463     EncodeCallBack() {};
00464 
00468     virtual ~EncodeCallBack () throw() {}
00469 
00484     virtual void onMessage (CallBack <EncodeCallBack> * callBack, 
00485                             void * packet,
00486                             int4 packetSize,
00487                             void * origPacket,
00488                             int4 origPacketSize,
00489                             TipcMsg & origMessage,
00490                             TipcConn & connection);
00491   };
00492 
00493 
00494 
00501   class T_IPCX_CB_API DecodeCallBack
00502   {
00503   public:
00504     typedef void (DecodeCallBack::* Handler) (
00505                                 CallBack < DecodeCallBack > * callBack,
00506                                 void * packet,
00507                                 int4 packetSize,
00508                                 void * origPacket,
00509                                 int4 origPacketSize,
00510                                 TipcConn & connection);
00511 
00515     DecodeCallBack() {};
00516 
00520     virtual ~DecodeCallBack () throw() {};
00521 
00533     virtual void onMessage (CallBack <DecodeCallBack> * callBack,
00534                             void * packet,
00535                             int4 packetSize,
00536                             void * origPacket,
00537                             int4 origPacketSize,
00538                             TipcConn & connection);
00539   };
00540 
00541 }
00542 #endif

Generated on Fri Jul 14 15:05:54 2006 by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001