You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.6 KiB
121 lines
2.6 KiB
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <inttypes.h>
|
|
|
|
#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:
|