diff --git a/.gitignore b/.gitignore index 845a5de..8d3543e 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ test-driver /assets/html/_documentation.html tags /trcomm.h* +/testers/testserver diff --git a/src/conn_entry_point.c b/src/conn_entry_point.c index 9f853f2..1da4e7f 100644 --- a/src/conn_entry_point.c +++ b/src/conn_entry_point.c @@ -36,7 +36,13 @@ static int connEntryPointCtor(void * _this, va_list * params) { + TR_CommEndPoint this = _this; + TR_PARENTCALL(TR_ConnEntryPoint, _this, TR_Class, ctor, params); + + TR_socketBind((TR_Socket)this->transport); + TR_socketNonblock((TR_Socket)this->transport); + return 0; } diff --git a/src/connector.c b/src/connector.c index 679541a..fc1a9f4 100644 --- a/src/connector.c +++ b/src/connector.c @@ -32,6 +32,7 @@ #include "tr/connector.h" #include "tr/connection.h" #include "tr/protocol.h" +#include "tr/connect_entry_point.h" static int @@ -84,8 +85,8 @@ connectorCvInit(TR_class_ptr cls) { TR_EVENT_HANDLER_SET_METHOD( cls, - TR_CommEndPoint, - TR_CEP_EVENT_READ_READY, + TR_ConnEntryPoint, + TR_CET_EVENT_ACC_READY, connectorAccept); } diff --git a/testers/build.sh b/testers/build.sh new file mode 100644 index 0000000..6aa51e2 --- /dev/null +++ b/testers/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash +TRLIBS="-ltrbase -ltrhashing -ltrio -ltrdata -ltrevent -ltrcomm" +LIBS="-lcrypto -lssl -lrt -luuid" +gcc ${CFLAGS} -I/usr/local/include -L/usr/local/lib ${TRLIBS} ${LIBS} -o testserver testserver.c diff --git a/testers/testserver.c b/testers/testserver.c new file mode 100644 index 0000000..78ea34c --- /dev/null +++ b/testers/testserver.c @@ -0,0 +1,137 @@ +#include + +#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: