#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("handled: %llu/s\n", ((TestHandler)this)->handled); ((TestHandler)this)->handled = 0; return TR_EVENT_DONE; } static TR_EventDone testHandlerNewMessage(TR_EventHandler this, TR_Event event) { // TR_ProtoMessageRaw msg = event->data; // TR_SizedData data = (TR_SizedData)msg->data; // char buf[data->size + 1]; // int i; TR_Event _event; ((TestHandler)this)->handled++; // printf("handled data %p\n", event->data); // memcpy(buf, data->data, data->size); // buf[data->size] = 0; // for (i = 0; buf[i]; i++) { // if (! isprint(buf[i])) buf[i] = '.'; // } // printf("echo message: %s(%zd)\n", buf, data->size); _event = TR_eventSubjectEmit( event->subject, TR_CEP_EVENT_SEND_MSG, 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; } static TR_EventDone testHandlerUpgrade(TR_EventHandler this, TR_Event event) { printf("upgrade: %"PRIdPTR"\n", event->id); return TR_EVENT_PENDING; } 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); TR_EVENT_HANDLER_SET_METHOD( class, TR_CommEndPoint, TR_CEP_EVENT_UPGRADE, testHandlerUpgrade); } 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: