#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 beats 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_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_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; } //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: