Browse Source

bind automatically and set socket to nonblocking. Add testcode.

1.0.0
Georg Hopp 11 years ago
parent
commit
b85024ba2b
  1. 1
      .gitignore
  2. 6
      src/conn_entry_point.c
  3. 5
      src/connector.c
  4. 4
      testers/build.sh
  5. 137
      testers/testserver.c

1
.gitignore

@ -40,3 +40,4 @@ test-driver
/assets/html/_documentation.html
tags
/trcomm.h*
/testers/testserver

6
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;
}

5
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);
}

4
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

137
testers/testserver.c

@ -0,0 +1,137 @@
#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:
Loading…
Cancel
Save