当前位置: 首页>>代码示例>>C++>>正文


C++ Listener::create_session方法代码示例

本文整理汇总了C++中Listener::create_session方法的典型用法代码示例。如果您正苦于以下问题:C++ Listener::create_session方法的具体用法?C++ Listener::create_session怎么用?C++ Listener::create_session使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Listener的用法示例。


在下文中一共展示了Listener::create_session方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: uv_new_connection_callback

void Listener::uv_new_connection_callback( uv_stream_t * server , int status )
{
    Listener* listener = scast<Listener*>( server->data );

    if ( status < 0 )
    {
        LOG_DEBUG_UV( status );
        return;
    }

    if ( listener == nullptr )
    {
        LOG_DEBUG( "Listener is nullptr!" );
        return;
    }

    auto session = listener->create_session( );

    uv_tcp_init             ( listener->uv_loop_ , 
                              &session->uv_tcp_ );

    session->uv_tcp_.data   = session;
    session->opt_           = listener;

    auto r = uv_accept( server , ( uv_stream_t* ) &session->uv_tcp_ );

    struct sockaddr  peername;
    struct sockaddr_in* peer_addr;
    int namelen;
    memset(&peername, -1, sizeof peername);
	namelen = sizeof peername;
	r = uv_tcp_getpeername(&session->uv_tcp_, &peername, &namelen);
    peer_addr = (sockaddr_in*)&peername;
    
    auto ip = inet_ntoa( peer_addr->sin_addr );
    session->ip_address_ = ip;
    session->port_ = peer_addr->sin_port;

    if ( r == 0 )
    {
        //for ( size_t i = 0; i <= listener->session_list_index_; i++ )
        //{
        //    if ( listener->session_list_[i] == nullptr )
        //    {
        //        listener->session_list_[i] = session;
        //        if ( listener->session_list_index_ == i )
        //        {
        //            listener->session_list_index_ = 
        //                ( listener->session_list_index_ + 1 ) %
        //                MAX_CONNECTION_SIZE;
        //        }
        //        break;
        //    }
        //}

        r = uv_read_start( (uv_stream_t*)&session->uv_tcp_ , 
                           Listener::uv_alloc_callback , 
                           Listener::uv_read_callback );
        LOG_DEBUG_UV( r );

        listener->on_session_open( session );
        session->on_connect( );
    }
    else
    {
        uv_close( ( uv_handle_t* ) &session->uv_tcp_ , 
                  Listener::uv_close_callback );
    }
}
开发者ID:Yhgenomics,项目名称:maraton-framework-v2,代码行数:69,代码来源:Listener.cpp


注:本文中的Listener::create_session方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。