本文整理汇总了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 );
}
}