Main Page   Class Hierarchy   Compound List   File List   Compound Members  

tevent.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/tevent.h#1 $
00008  */
00009 
00010 #ifndef _T_EVENT_HH
00011 #define _T_EVENT_HH
00012 
00013 #include <rtworks/ipc.h>
00014 #include <rtworks/tex.h>
00015 
00016 namespace SmartSockets {
00017 
00024   class T_IPCX_API TipcEventException : public TipcException {
00025 
00026   public:
00030     TipcEventException () {};
00031 
00035     virtual ~TipcEventException () throw() {
00036     }
00037   };
00038 
00039   class T_IPCX_API MessageEvent;
00040   class T_IPCX_API SocketEvent;
00041   class T_IPCX_API UserEvent;
00042   class T_IPCX_API ConnEvent;
00043   class T_IPCX_API TimerEvent;
00044   class T_IPCX_API TipcMsg;
00045   class T_IPCX_API TipcConn;
00046   class T_IPCX_API TipcSrv;
00047   class T_IPCX_API TipcDispatcher;
00048 
00058   class T_IPCX_API MessageEventHandler {
00059   public:
00060 
00069     typedef void (MessageEventHandler::*Handler) (
00070                                                  MessageEvent& event,
00071                                                  TipcMsg& msg);
00072 
00073 
00081     virtual void onMessage(MessageEvent& event,
00082                            TipcMsg& msg)
00083     {
00084     }
00085   };
00086 
00087 
00097   class T_IPCX_API SocketEventHandler {
00098   public:
00110     typedef void (SocketEventHandler::*Handler) (
00111                                                 SocketEvent& event,
00112                                                 sock socketFd,
00113                                                 T_IO_CHECK_MODE checkMode);
00114 
00127     virtual void onSocket(SocketEvent& event,
00128                           sock socketFd,
00129                           T_IO_CHECK_MODE checkMode)
00130     {
00131     }
00132   };
00133 
00134 
00144   class T_IPCX_API UserEventHandler {
00145   public:
00146 
00155     typedef void (UserEventHandler::*Handler) (
00156                                               UserEvent& event,
00157                                               void* data);
00158 
00159 
00168     virtual void onUserEvent(UserEvent& event,
00169                              void* data)
00170     {
00171     }
00172   };
00173 
00174 
00184   class T_IPCX_API ConnEventHandler {
00185   public:
00197     typedef void (ConnEventHandler::*Handler) (
00198                                               ConnEvent& event,
00199                                               TipcConn& conn,
00200                                               T_IO_CHECK_MODE checkMode);
00201 
00213     virtual void onConnEvent (ConnEvent& event,
00214                               TipcConn& conn,
00215                               T_IO_CHECK_MODE checkMode)
00216     {
00217 #if 0
00218       if (checkMode == T_IO_CHECK_READ) {
00219         TipcMsg* msg = conn.next(T_TIMEOUT_FOREVER);
00220         if (msg != NULL) {
00221           conn.process(*msg);
00222           delete msg;
00223         }
00224       }
00225 #endif
00226     }
00227   };
00228 
00229 
00239   class T_IPCX_API TimerEventHandler {
00240   public:
00249     typedef void (TimerEventHandler::*Handler) (
00250                                                TimerEvent& event,
00251                                                real8 timerInterval);
00252 
00261     virtual void onTimer(TimerEvent& event,
00262                          real8 timerInterval)
00263     {
00264       printf ("Current time = %f\n", TutGetWallTime());
00265     }
00266   };
00267 
00268 
00284   class T_IPCX_API TipcEvent {
00285 
00286   public:
00288 
00289     friend class T_IPCX_API TipcDispatcher;
00290     friend class T_IPCX_API TipcDispatcherTraverser;
00292 
00293   protected:
00294 
00299     TipcEvent()
00300     : _event (NULL)
00301     {
00302     }
00303 
00307     virtual ~TipcEvent() throw()
00308     {
00309     }
00310 
00311 
00312 
00316     void setEvent(T_IPC_EVENT event)
00317     {
00318       _event = event;
00319     }
00320   public:
00321 
00322 
00327     void destroy() throw (TipcException)
00328     {
00329       if (_event != NULL) {
00330         if (!TipcEventDestroy(_event))
00331           throw TipcEventException();
00332       }
00333       delete this;
00334     }
00335 
00336 
00340     TipcDispatcher getDispatcher()
00341     throw (TipcException);
00342 
00347     operator T_IPC_EVENT() const
00348     throw ()
00349     {
00350       return _event;
00351     }
00352 
00365     T_IPC_EVENT_TYPE getType() const
00366     throw (TipcException);
00367 
00368 
00369   protected:
00373     T_IPC_EVENT _event;
00374 
00375   };
00376 
00377 
00378 
00392   class T_IPCX_API UserEvent: public TipcEvent {
00393   public:
00395 
00396     friend class T_IPCX_API TipcDispatcher;
00397     friend class T_IPCX_API TipcDispatcherTraverser;
00399 
00406     const void* getData() throw (TipcException)
00407     {
00408       void* data = NULL;
00409       if (!TipcEventGetData(_event,&data))
00410         throw TipcEventException();
00411       return const_cast <const void*> (data);
00412     }
00413 
00414   private:
00419     UserEvent(UserEventHandler* handlerObj,
00420               UserEventHandler::Handler handlerMethod)
00421     : _handlerObj(handlerObj)
00422     , _handlerMethod(handlerMethod)
00423     {
00424     }
00425 
00426     virtual ~UserEvent() throw()
00427     {
00428     }
00429 
00430     UserEventHandler* _handlerObj;
00431     UserEventHandler::Handler _handlerMethod;
00432   };
00433 
00463   class T_IPCX_API MessageEvent: public TipcEvent {
00464   public:
00466 
00467     friend class T_IPCX_API TipcDispatcher;
00468     friend class T_IPCX_API TipcDispatcherTraverser;
00470   private:
00475     MessageEvent(MessageEventHandler* handlerObj,
00476                  MessageEventHandler::Handler handlerMethod)
00477     : _handlerObj(handlerObj)
00478     , _handlerMethod(handlerMethod)
00479     {
00480     }
00481     virtual ~MessageEvent() throw()
00482     {
00483     }
00484 
00485     MessageEventHandler* _handlerObj;
00486     MessageEventHandler::Handler _handlerMethod;
00487   };
00488 
00489 
00512   class T_IPCX_API SocketEvent: public TipcEvent {
00513   public:
00515 
00516     friend class T_IPCX_API TipcDispatcher;
00517     friend class T_IPCX_API TipcDispatcherTraverser;
00518 
00523     sock getSocket() throw (TipcException)
00524     {
00525       sock socketFd = 0;
00526       if (!TipcEventGetSocket(_event,&socketFd))
00527         throw TipcEventException();
00528       return socketFd;
00529     }
00530 
00535     T_IO_CHECK_MODE getCheckMode() throw (TipcException)
00536     {
00537       T_IO_CHECK_MODE checkMode;
00538       if (!TipcEventGetCheckMode(_event,&checkMode))
00539         throw TipcEventException();
00540       return checkMode;
00541     }
00542 
00543   private:
00548     SocketEvent(SocketEventHandler* handlerObj,
00549                 SocketEventHandler::Handler handlerMethod)
00550     : _handlerObj(handlerObj)
00551     , _handlerMethod(handlerMethod)
00552     {
00553     }
00554 
00555     virtual ~SocketEvent() throw()
00556     {
00557     }
00558     SocketEventHandler* _handlerObj;
00559     SocketEventHandler::Handler _handlerMethod;
00560   };
00561 
00562 
00585   class T_IPCX_API ConnEvent: public TipcEvent {
00586   public:
00588 
00589     friend class T_IPCX_API TipcDispatcher;
00590     friend class T_IPCX_API TipcDispatcherTraverser;
00592 
00596     T_IO_CHECK_MODE getCheckMode() throw (TipcException)
00597     {
00598       T_IO_CHECK_MODE checkMode;
00599       if (!TipcEventGetCheckMode(_event,&checkMode))
00600         throw TipcEventException();
00601       return checkMode;
00602     }
00603 
00604   private:
00609     ConnEvent(ConnEventHandler* handlerObj,
00610               ConnEventHandler::Handler handlerMethod)
00611     : _handlerObj(handlerObj)
00612     , _handlerMethod(handlerMethod)
00613     {
00614     }
00615 
00616     virtual ~ConnEvent() throw()
00617     {
00618     }
00619 
00620     ConnEventHandler* _handlerObj;
00621     ConnEventHandler::Handler _handlerMethod;
00622   };
00623 
00637   class T_IPCX_API TimerEvent: public TipcEvent {
00638   public:
00640 
00641     friend class T_IPCX_API TipcDispatcher;
00642     friend class T_IPCX_API TipcDispatcherTraverser;
00644 
00648     real8 getTimerInterval() throw (TipcException)
00649     {
00650       real8 interval;
00651       if (!TipcEventGetInterval(_event,&interval))
00652         throw TipcEventException();
00653       return interval;
00654     }
00655 
00661     void setTimerInterval(real8 interval) throw (TipcException)
00662     {
00663       if (!TipcEventSetInterval(_event,interval))
00664         throw TipcEventException();
00665     }
00666 
00667   private:
00672     TimerEvent(TimerEventHandler* handlerObj,
00673                TimerEventHandler::Handler handlerMethod)
00674     : _handlerObj(handlerObj)
00675     , _handlerMethod(handlerMethod)
00676     {
00677     }
00678     virtual ~TimerEvent() throw()
00679     {
00680     }
00681 
00682     TimerEventHandler* _handlerObj;
00683     TimerEventHandler::Handler _handlerMethod;
00684   };
00685 
00686 } //namespace SmartSockets
00687 
00688 #endif //_T_EVENT_HH

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