Exemple #1
0
CPipeAcceptedResult::~CPipeAcceptedResult()
{
	CAsynPipe* pAsyPipe = CAsynPipe::GetAsynPipe(m_uPipeId);
	if (!pAsyPipe || (pAsyPipe->GetSessionID() != m_uSessionID))
		return;

	if (!pAsyPipe->IsListening())
		return;

	CAsynPipe* pNewAsynPipe = new CAsynPipe( NULL, pAsyPipe->GetSendBufferSize(), pAsyPipe->GetRecvBufferSize(), m_nNewPipeID );

	CAsynPipeReactor* pReactor=class_cast<CAsynPipeReactor*>(pAsyPipe->GetReactor());

	pReactor->Register(pNewAsynPipe);

	pNewAsynPipe->SetThreadId(m_uThreadId);

	CAddress LocalAddr;
	LocalAddr.SetAddress(m_szLocalAddr);
	LocalAddr.SetPort(m_uLocalPort);

	CAddress RemoteAddr;
	RemoteAddr.SetAddress(m_szRemoteAddr);
	RemoteAddr.SetPort(m_uRemotePort);

	pNewAsynPipe->SetLocalAddr(LocalAddr);
	pNewAsynPipe->SetRemoteAddr(RemoteAddr);

	pAsyPipe->GetHandler()->OnAccepted(pNewAsynPipe);

	if( !pNewAsynPipe->GetHandler() )
	{
		pReactor->Unregister( pNewAsynPipe );

		CPipeThread* pThread = CPipeThreadMgr::Inst()->GetThread(m_uThreadId);
		(new(pThread) CPipeReleaseJob(pNewAsynPipe->GetLocalID(), pThread))->Add(pThread);
		pNewAsynPipe->Release();		
	}

	CPipeThread* pOldThread = CPipeThreadMgr::Inst()->GetThread(m_uOldThreadId);
	(new(pOldThread) CRemoveWaitedPipeFromListJob(m_pPipe, pOldThread))->Add(pOldThread);
}
Exemple #2
0
CPipeConnectSuccResult::~CPipeConnectSuccResult()
{
	CAsynPipe* pAsyPipe = CAsynPipe::GetAsynPipe(m_uPipeId);
	if (!pAsyPipe || (pAsyPipe->GetSessionID() != m_uSessionID))
		return;

	CAddress LocalAddr;
	LocalAddr.SetAddress(m_szLocalAddr);
	LocalAddr.SetPort(m_uLocalPort);

	CAddress RemoteAddr;
	RemoteAddr.SetAddress(m_szRemoteAddr);
	RemoteAddr.SetPort(m_uRemotePort);

	pAsyPipe->SetLocalAddr(LocalAddr);
	pAsyPipe->SetRemoteAddr(RemoteAddr);
	pAsyPipe->m_eState=eAPS_Connected;

	pAsyPipe->GetHandler()->OnConnected();
}