From 59594f31458628e2666ad4ce0dae2e4b80b1beaa Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Tue, 5 Aug 2014 18:54:05 +0100 Subject: [PATCH] derive EventDispatcher from EventSubject --- include/tr/event_dispatcher.h | 11 ++++++++++- src/event_dispatcher.c | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/include/tr/event_dispatcher.h b/include/tr/event_dispatcher.h index afd3fa1..b1e6cd2 100644 --- a/include/tr/event_dispatcher.h +++ b/include/tr/event_dispatcher.h @@ -40,6 +40,8 @@ typedef enum TR_e_EventDispatcherMode { } TR_EventDispatcherMode; TR_CLASS(TR_EventDispatcher) { + TR_EXTENDS(TR_EventSubject); + TR_Queue events; TR_Hash handler; TR_EventHandler default_handler; @@ -49,7 +51,14 @@ TR_CLASS(TR_EventDispatcher) { TR_EventDispatcherMode mode; }; TR_INSTANCE_INIT(TR_EventDispatcher); -TR_CLASSVARS_DECL(TR_EventDispatcher) {}; +TR_CLASSVARS_DECL(TR_EventDispatcher) { + TR_CV_EXTENDS(TR_EventSubject); +}; + +#define TR_DISPATCHER_EVENT_HEARTBEAT 0 +#define TR_DISPATCHER_EVENT_USER_WAIT 1 +#define TR_DISPATCHER_EVENT_DATA_WAIT 2 +#define TR_DISPATCHER_EVENT_SHUTDOWN 3 void TR_eventDispatcherRegisterHandler(TR_EventDispatcher, TR_EventHandler); void TR_eventDispatcherSetHeartbeat(TR_EventDispatcher, time_t); diff --git a/src/event_dispatcher.c b/src/event_dispatcher.c index 80a8007..f9a8a7f 100644 --- a/src/event_dispatcher.c +++ b/src/event_dispatcher.c @@ -54,7 +54,21 @@ eventDispatcherDtor(void * _this) { TR_delete(this->events); } +static +void +eventDispatcherCvInit(TR_class_ptr cls) +{ + TR_EVENT_CREATE(cls, TR_DISPATCHER_EVENT_HEARTBEAT); + TR_EVENT_CREATE(cls, TR_DISPATCHER_EVENT_USER_WAIT); + TR_EVENT_CREATE(cls, TR_DISPATCHER_EVENT_DATA_WAIT); + TR_EVENT_CREATE(cls, TR_DISPATCHER_EVENT_SHUTDOWN); +} + TR_INIT_IFACE(TR_Class, eventDispatcherCtor, eventDispatcherDtor, NULL); -TR_CREATE_CLASS(TR_EventDispatcher, NULL, NULL, TR_IF(TR_Class)); +TR_CREATE_CLASS( + TR_EventDispatcher, + TR_EventSubject, + eventDispatcherCvInit, + TR_IF(TR_Class)); // vim: set ts=4 sw=4: