#include #include #include #include "trbase.h" #include "trcomm.h" #include "trevent.h" #include "test_handler.h" static TR_EventDone testHandlerHeartbeat(TR_EventHandler this, TR_Event event) { printf("%zd beat(s) since last beat / handled: %llu/s\n", ((TR_EventDispatcher)event->subject)->n_beats, ((TestHandler)this)->handled); ((TestHandler)this)->handled = 0; return TR_EVENT_DONE; } static TR_EventDone testHandlerNewMessage(TR_EventHandler this, TR_Event event) { TR_Event _event; ((TestHandler)this)->handled++; _event = TR_eventSubjectEmit( event->subject, TR_CEP_EVENT_MSG_READY, event->data); TR_eventHandlerIssueEvent((TR_EventHandler)this, _event); return TR_EVENT_DONE; } static TR_EventDone testHandlerClose(TR_EventHandler this, TR_Event event) { // puts("close"); return TR_EVENT_PENDING; } #if 0 static TR_EventDone testHandlerUpgrade(TR_EventHandler this, TR_Event event) { printf("upgrade: %"PRIdPTR"\n", event->id); return TR_EVENT_PENDING; } #endif static int testHandlerCtor(void * _this, va_list * params) { TR_PARENTCALL(TestHandler, _this, TR_Class, ctor, params); ((TestHandler)_this)->handled = 0; return 0; } static void testHandlerDtor(void * _this, va_list * params) { TR_PARENTCALL(TestHandler, _this, TR_Class, dtor); } static void testHandlerCvInit(TR_class_ptr class) { TR_EVENT_HANDLER_SET_METHOD( class, TR_EventDispatcher, TR_DISPATCHER_EVENT_HEARTBEAT, testHandlerHeartbeat); TR_EVENT_HANDLER_SET_METHOD( class, TR_CommEndPoint, TR_CEP_EVENT_NEW_MSG, testHandlerNewMessage); TR_EVENT_HANDLER_SET_METHOD( class, TR_CommEndPoint, TR_CEP_EVENT_CLOSE, testHandlerClose); #if 0 TR_EVENT_HANDLER_SET_METHOD( class, TR_CommEndPoint, TR_CEP_EVENT_UPGRADE, testHandlerUpgrade); #endif } TR_INSTANCE(TR_Hash, testHandlerEventMethods); TR_INIT_IFACE(TR_Class, testHandlerCtor, testHandlerDtor, NULL); TR_CREATE_CLASS( TestHandler, TR_EventHandler, testHandlerCvInit, TR_IF(TR_Class)) = { { &(_testHandlerEventMethods.data) } }; // vim: set ts=4 sw=4: