00001
00002
00003
00004
00005
00006
00007
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 }
00687
00688 #endif //_T_EVENT_HH