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.
137 lines
3.1 KiB
137 lines
3.1 KiB
#include <stdio.h>
|
|
|
|
#include "trbase.h"
|
|
#include "trcomm.h"
|
|
#include "trevent.h"
|
|
|
|
TR_CLASS(TestHandler) {
|
|
TR_EXTENDS(TR_EventHandler);
|
|
};
|
|
TR_INSTANCE_INIT(TestHandler);
|
|
TR_CLASSVARS_DECL(TestHandler) {
|
|
TR_CV_EXTENDS(TR_EventHandler);
|
|
};
|
|
|
|
static
|
|
int
|
|
testHandlerHeartbeat(TR_EventHandler this, TR_Event event)
|
|
{
|
|
puts("heartbeat");
|
|
return FALSE;
|
|
}
|
|
|
|
static
|
|
int
|
|
testHandlerNewMessage(TR_EventHandler this, TR_Event event)
|
|
{
|
|
puts("new message");
|
|
return FALSE;
|
|
}
|
|
|
|
static
|
|
int
|
|
testHandlerClose(TR_EventHandler this, TR_Event event)
|
|
{
|
|
puts("close");
|
|
return FALSE;
|
|
}
|
|
|
|
static
|
|
int
|
|
testHandlerUpgrade(TR_EventHandler this, TR_Event event)
|
|
{
|
|
puts("upgrade");
|
|
return FALSE;
|
|
}
|
|
|
|
static
|
|
int
|
|
testHandlerCtor(void * _this, va_list * params)
|
|
{
|
|
TR_PARENTCALL(TestHandler, _this, TR_Class, ctor, params);
|
|
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_EventDispatcher,
|
|
TR_CEP_EVENT_CLOSE,
|
|
testHandlerClose);
|
|
TR_EVENT_HANDLER_SET_METHOD(
|
|
class,
|
|
TR_EventDispatcher,
|
|
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) }
|
|
};
|
|
|
|
TR_INSTANCE(TR_LoggerSyslog, mylogger, {TR_LOGGER_DEBUG});
|
|
|
|
int
|
|
main (int argc, char * argv[])
|
|
{
|
|
TR_CommManager cmgr = (TR_CommManager)TR_new(TR_CommManagerPoll);
|
|
TR_EventDispatcher dispatcher = TR_new(TR_EventDispatcher);
|
|
TR_ConnEntryPoint ep;
|
|
TR_TcpSocket ep_sock;
|
|
TR_Protocol protocol;
|
|
|
|
TR_logger = TR_INSTANCE_CAST(TR_Logger, mylogger);
|
|
|
|
TR_eventDispatcherRegisterHandler(dispatcher, (TR_EventHandler)cmgr);
|
|
TR_eventDispatcherRegisterHandler(dispatcher,
|
|
(TR_EventHandler)TR_new(TR_Connector));
|
|
TR_eventDispatcherRegisterHandler(dispatcher,
|
|
(TR_EventHandler)TR_new(TR_IoHandler));
|
|
TR_eventDispatcherRegisterHandler(dispatcher,
|
|
(TR_EventHandler)TR_new(TR_ProtocolHandler));
|
|
TR_eventDispatcherRegisterHandler(dispatcher,
|
|
(TR_EventHandler)TR_new(TestHandler));
|
|
|
|
protocol = TR_new(TR_ProtocolRaw);
|
|
ep_sock = TR_new(TR_TcpSocket, TR_logger, "0.0.0.0", 5678, 0);
|
|
ep = TR_new(TR_ConnEntryPoint, ep_sock, protocol);
|
|
|
|
TR_commManagerAddEndpoint(cmgr, (TR_CommEndPoint)ep);
|
|
|
|
TR_eventDispatcherSetHeartbeat(dispatcher, 1000);
|
|
TR_eventDispatcherStart(dispatcher);
|
|
TR_eventHandlerClassCleanup(TestHandler);
|
|
|
|
TR_delete(cmgr);
|
|
TR_delete(dispatcher);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// vim: set ts=4 sw=4:
|