#include "StdAfx.h"
#include "LibEvent.h"
#include
#include
#include
#ifdef WIN32
#include
#include
#else
#include
#include
#include
#include
#include
#include
#include
#endif
using namespace std;
CLibEvent::CLibEvent(void)
{
#ifdef WIN32
ZeroMemory(&m_Server, sizeof(m_Server));
WSADATA WSAData;
WSAStartup(0x0201, &WSAData);
#else
memset(&m_Server, 0, sizeof(m_Server));
#endif // WIN32
}
CLibEvent::~CLibEvent(void)
{
#ifdef WIN32
WSACleanup();
#endif // WIN32
}
bool CLibEvent::StartServer(int port, short workernum, unsigned int connnum, int read_timeout, int write_timeout,
int inbuffmax, int outbuffmax, ITcpPacketNotify* notify)
{
m_notify = notify;
m_Server.bStart=false;
m_Server.nCurrentWorker=0;
m_Server.nPort=port;
m_Server.workernum=workernum;
m_Server.connnum=connnum;
m_Server.read_timeout=read_timeout;
m_Server.write_timeout=write_timeout;
#ifdef WIN32
evthread_use_windows_threads();
#else
evthread_use_pthreads();
#endif // WIN32
m_Server.pBase=event_base_new();
if (m_Server.pBase==NULL)
{
return false;
}
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(m_Server.nPort);
m_Server.pListener=evconnlistener_new_bind(m_Server.pBase,DoAccept,(void*)this,LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, 1024,(struct sockaddr*)&sin,sizeof(sin));
if (m_Server.pListener==NULL)
{
return false;
}
m_Server.pWorker=new Worker[workernum];
for (int i=0;i
{
m_Server.pWorker[i].pWokerbase=event_base_new();
if (m_Server.pWorker[i].pWokerbase== NULL)
{
delete []m_Server.pWorker;
return false;
}