Exemple #1
0
int PeerNode::Connect()
{
	int result = 0;
	boost::recursive_mutex::scoped_lock L(m_mutex);

	// if already connected then return
	if( m_bConnected == true ) 
		return 0;
	
	// else connects
	// makes connection via connection manager interface
	ConnectionManagerPtr pConnMgr = ConnectionManager::GetConnectionManager();
	ConnectionPtr pConn = m_pConn;
	if(pConn == NULL) {
		pConn = pConnMgr->Connect(m_ipAddress, m_listenPort);
		if( pConn == NULL ) {
			Log(ERR, L"Could not make connection to Peer Node with ip - %s, port - %d\n", m_ipAddress, m_port);
			if( this->IsCoordinatorNode() ) {
				// try connecting to backups
				pConn = ConnectBackups();
			}
			if( pConn == NULL ) {
				return -1;
			}
		}
	} else {
		pConn->Connect(m_ipAddress, m_listenPort);
	}

	//m_pConn.reset();
	m_pConn = pConn;
	m_pConn->SetPeerNode(shared_from_this());
	m_pConn->Start();
	m_bConnected = true;
	return result;
}