示例#1
0
BOOL P2PManager::RemovePeer(BYTE byIndex)
{	
	DelPeer(byIndex);	

	return TRUE;
}
示例#2
0
int CMain::ReceiveCliHandler()
{
	int nRet = 0;
	CSocket *cClient = NULL;
	CCliPeer *cPeer = NULL;
	CProtocol *cProto = NULL;

	cClient = m_cSock.Select(0, 1);
	if(cClient == NULL){
		if(m_cSock.m_enError == CSocket::SOCK_TIMEOUT){
			return CLA_OK;
		}
		else {
			CLA_LOG(CLA_ERR,false,"Socket select failed(err=%d, msg=%s, errno=%d(%s)\n", 
					m_cSock.m_enError,
					m_cSock.m_strErrorMsg.c_str(), 
					errno, strerror(errno));
			return CLA_NOK;
		}
	}

	cPeer = FindPeerByFd(cClient->GetSocket());
	if(cPeer == NULL){
		CLA_LOG(CLA_ERR,false,"Accept peer(fd=%d)\n",cClient->GetSocket());
		nRet = InsertPeer(cClient);
		if(nRet != CLA_OK){
			CLA_LOG(CLA_ERR,false,"Peer insert failed(nRet=%d)\n",nRet);
			return CLA_NOK;
		}
		return CLA_OK;
	}

	nRet = cPeer->ReceiveProcess();
	if(nRet == CLA_RSLT_PROCESS_END){
		return CLA_OK;
	}
	else if(nRet == CLA_RSLT_PEER_CLOSED){
		CLA_LOG(CLA_ERR,false,"Delete peer(fd=%d)\n",cPeer->GetSocketFd());

		//m_cSock.DelPeer(cPeer->GetSocketFd());
		/* close Peer */
		DelPeer(cPeer);

		return CLA_OK;
	}
	else if(nRet != CLA_OK){
		CLA_LOG(CLA_ERR,false,"Peer message receive failed(ret=%d)\n",nRet);
		return CLA_NOK;
	}

	cProto = cPeer->Receive();
	if(cProto == NULL) {
		CLA_LOG(CLA_ERR,false,"Peer message not exist\n");
		return CLA_OK;
	}

	nRet = RouteHandler(cPeer, cProto);
	if(nRet != CLA_OK){
		CLA_LOG(CLA_ERR,false,"Message routing failed\n");
		return CLA_NOK;
	}

	return CLA_OK;
}