예제 #1
0
파일: iolayer.c 프로젝트: snivel/libevlite
// 创建网络通信层
iolayer_t iolayer_create( uint8_t nthreads, uint32_t nclients )
{
    struct iolayer * self = (struct iolayer *)malloc( sizeof(struct iolayer) );
    if ( self == NULL )
    {
        return NULL;
    }

    self->context   = NULL;
    self->transform = NULL;
    self->nthreads  = nthreads;
    self->nclients  = nclients;
    self->localfunc = NULL;
    self->localdata = NULL;
    self->status    = eLayerStatus_Running;

    // 初始化会话管理器
    if ( _new_managers( self ) != 0 )
    {
        iolayer_destroy( self );
        return NULL;
    }

    // 创建网络线程组
    self->group = iothreads_start( self->nthreads, _io_methods, self );
    if ( self->group == NULL )
    {
        iolayer_destroy( self );
        return NULL;
    }

    return self;
}
예제 #2
0
파일: io.cpp 프로젝트: JoyZou/libevlite
void IIOService::stop()
{
    if ( m_IOLayer != NULL )
    {
        iolayer_destroy( m_IOLayer );
        m_IOLayer = NULL;
    }

    for ( size_t i = 0; i < m_ListenContexts.size(); ++i )
    {
        delete m_ListenContexts[i];
    }

    for ( size_t i = 0; i < m_ConnectContexts.size(); ++i )
    {
        delete m_ConnectContexts[i];
    }

    if ( m_IOContextGroup != NULL )
    {
        for ( uint8_t i = 0; i < m_ThreadsCount; ++i )
        {
            if ( m_IOContextGroup != NULL )
            {
                finalIOContext( m_IOContextGroup[i] );
            }
        }

        delete [] m_IOContextGroup;
    }

    m_ListenContexts.clear();
    m_ConnectContexts.clear();
}