本文整理汇总了C++中Session::Disconnect方法的典型用法代码示例。如果您正苦于以下问题:C++ Session::Disconnect方法的具体用法?C++ Session::Disconnect怎么用?C++ Session::Disconnect使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Session
的用法示例。
在下文中一共展示了Session::Disconnect方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ValidCheck
void SessionList::ValidCheck(DWORD TickTime)
{
UNREFERENCED_PARAMETER(TickTime);
AutoMutex mutex(&_mutex);
mutex.Lock();
Session* pSession = NULL;
for (LISTIT it = _sessionList.Begin(); it != _sessionList.End();)
{
pSession = *(_sessionList.GetPtr(it));
if (pSession)
{
if (false == pSession->ValidCheck(TickTime))
{
Logger::Log("The session[%X] should be disconnected due to timeout.\n", pSession);
pSession->Disconnect(false);
}
if (true == pSession->IsShutdownable())
{
pSession->Shutdown();
_NetworkRef->PostNetEventMessage((WPARAM)NETEVENT_CLOSE, (LPARAM)pSession);
it = _sessionList.Remove(it);
continue;
}
}
it = _sessionList.Next(it);
}
}
示例2: HandleRecv
void IOCPPool::HandleRecv(Session& ikey)
{
if(ikey.m_nPendingRecv.get()==0)
{
return;
}
for(;;)
{
TempOlapPtr q=ikey.lkfq_recv.getq();
if(!q)
{
break;
}
if(q->type==MyOverLapped::ACTION_WAIT_RECV)
{
ikey.m_nPendingRecv--;
ikey.OnRecvReady();
break;
}
if(q->type==MyOverLapped::ACTION_UDP_RECV)
{
int bRet=ikey.sk_local.sock.recv(q->dbuf[0].buf,q->dbuf[0].len,q->peer);
if(bRet>0)
{
q->size=bRet;
accounter.nRecvBytes.fetch_add(bRet);
accounter.nSendCount++;
ikey.m_nPendingRecv--;
ikey.OnRecvCompleted(q);
break;
}
else if(bRet<0)
{
ikey.m_nPendingRecv--;
ikey.Disconnect();
break;
}
else
{
ikey.m_nPendingRecv--;
this_logger().LogMessage("recv udp failed");
}
break;
}
q->size=0;
for(;;)
{
int bRet=ikey.sk_local.sock.recv(q->dbuf[0].buf+q->size,q->dbuf[0].len-q->size);
if(bRet<0)
{
if(errno==EAGAIN)
{
break;
}
if(errno==EINTR)
{
continue;
}
ikey.Disconnect();
break;
}
else if(bRet==0)
{
break;
}
q->size+=bRet;
break;
}
if(q->size>0)
{
accounter.nRecvCount++;
accounter.nRecvBytes.fetch_add(q->size);
ikey.m_nPendingRecv--;
ikey.OnRecvCompleted(q);
}
else
{
ikey.m_nPendingRecv--;
}
break;
}
}
示例3: HandleSend
void IOCPPool::HandleSend(Session& ikey)
{
if(ikey.m_nPendingSend.get()==0)
{
return;
}
TempOlapPtr q=ikey.tmp_send;
for(;; q.reset(NULL))
{
if(!q)
{
q=ikey.lkfq_send.getq();
if(!q) break;
q->size=0;
if(q->type==MyOverLapped::ACTION_WAIT_SEND)
{
ikey.m_nPendingSend--;
ikey.OnSendReady();
ikey.lkfq_free.putq(q);
continue;
}
}
if(q->type==MyOverLapped::ACTION_UDP_SEND)
{
int bRet=ikey.sk_local.sock.send(q->dbuf[0].buf,q->dbuf[0].len,q->peer);
if(bRet>0)
{
q->size=bRet;
accounter.nSendBytes.fetch_add(q->size);
accounter.nSendCount++;
ikey.m_nPendingSend--;
ikey.OnSendCompleted(q);
continue;
}
else if(bRet==0)
{
ikey.tmp_send=q;
break;
}
else
{
ikey.Disconnect();
break;
}
}
for(;;)
{
int bRet=ikey.sk_local.sock.send(q->dbuf[0].buf+q->size,q->dbuf[0].len-q->size);
if(bRet<0)
{
if(errno==EAGAIN)
{
ikey.tmp_send=q;
break;
}
if(errno==EINTR)
{
continue;
}
ikey.Disconnect();
break;
}
else if(bRet==0)
{
ikey.tmp_send=q;
return;
}
q->size+=bRet;
if(q->size==q->dbuf[0].len)
{
accounter.nSendCount++;
accounter.nSendBytes.fetch_add(q->size);
ikey.m_nPendingSend--;
ikey.OnSendCompleted(q);
break;
}
}
}
}