void BHSequenceObject::ConnectorConnected(IConnector* conn,IConnector* other)
{
	BHConnector*c=(BHConnector*)conn;
	bool createConn=true;
	for(int i=0;i<m_output.size();++i)
	{
		BHConnector*cc=(BHConnector*)m_output[i];
		if(cc!=c && cc->GetConnections().size()==0)
		{
			createConn=false;
			break;
		}
	}
	c->ClearConnections();
	if(c->GetType()==BHConnector::EOutput)
	{
		if(createConn)
			AddConnector(new BHConnector(BHConnector::EOutput));
		IBHCanvasObject*o=(IBHCanvasObject*)other->GetOwner();
		m_node->AddNode( o->GetNode());

	}
}
Example #2
0
bool ACEClientEngine::Start(char* szIP, unsigned short port)
{
	return AddConnector(1, szIP, port) >= 0;
}
void IBHCanvasObject::_BuildConnectors()
{
	m_input=new BHConnector(BHConnector::EInput);
	AddConnector(m_input);
}
IBHCanvasObject::~IBHCanvasObject()
{
	AddConnector(new BHConnector(BHConnector::EOutput));
}
bool ConnectorManager_Client::ConnectToServer(const char* ip,
		uint16_t port, ConnectorID_t &ConnectorID) {
	int ret = 0;
	int step = 0;
	bool bRemove = false;
	Connector *pConnector = m_pConnectorPool->NewConnector();

	if (pConnector == NULL) return false;

	Socket*				pSocket = pConnector->GetSocket();	

	_NET_TRY
	{

		ret = pSocket->create_socket();
		if(!ret)
		{
			step = 1;
			goto EXCEPTION;
		}

		ret = pSocket->connect_socket(ip, port);
		if(!ret)
		{
			step = 2;
			goto EXCEPTION;
		}

		ret = pSocket->setNonBlocking();
		if(!ret)
		{
			step = 3;
			goto EXCEPTION;
		}

		ret = pSocket->setLinger(0);
		if(!ret)
		{
			step = 4;
			goto EXCEPTION;
		}

		ret = AddConnector(pConnector);

		if(!ret)
		{
			step = 6;
			goto EXCEPTION;
		}
		bRemove = true;

		NET::ConnecterState(pConnector->GetConnectorID(), NET::ConnecterConnect);
	}
	_NET_CATCH
	{
		step = 5;
		goto EXCEPTION;
	}

	WriteLog(KERN_INFO
			"ServerConnectorManager::ConnectToServer(): Success ! IP:%s Port:%d",
			ip,
			port
			);

	ConnectorID = pConnector->GetConnectorID();

	return true;

EXCEPTION:
	WriteLog(KERN_ERR
			"ClientConnectorManager::ConnectToServer(): Fail ! IP:%s Port:%d,Step:%d",
			ip,
			port,
			step
			);

	if( bRemove )
	{
		RemoveConnector(pConnector);
	}
	else
	{
		m_pConnectorPool->DelConnector(pConnector->GetConnectorID());
	}
	return false;
}
Connector* ConnectorManager_Client::AcceptNewConnection()
{
	if(m_bServerMode == false) return NULL;

	int32_t		step = 0;
	bool		ret = false;
	bool 		bRemove = false;
	Connector*	pConnector = NULL;
	_NET_TRY
	{
		pConnector = m_pConnectorPool->NewConnector();

		if( pConnector == NULL )
		{
			WriteLog(KERN_ERR "ConnectorManager::AcceptNewConnection(): Fail ! New Connector Fail" );
			return NULL;
		}

		ret = m_pServerSocket->accept_socket(pConnector->GetSocket());

		if(!ret)
		{
			m_pConnectorPool->DelConnector(pConnector->GetConnectorID());
			return NULL;
		}
	}
	_NET_CATCH
	{
		step += 1000;
		goto EXCEPTION;
	}

	_NET_TRY
	{
		Socket*				pSocket = pConnector->GetSocket();	

		if(pSocket->getFD() == INVALID_SOCKET )
		{
			step = 2;
			goto EXCEPTION;
		}

		ret = pSocket->setNonBlocking();
		if(!ret)
		{
			step = 3;
			goto EXCEPTION;
		}

		ret = pSocket->setLinger(0);
		if(!ret)
		{
			step = 4;
			goto EXCEPTION;
		}
		step = 5;
		ret = AddConnector(pConnector);

		if(!ret)
		{
			goto EXCEPTION;
		}
		bRemove = true;

		NET::ConnecterState(pConnector->GetConnectorID(), NET::ConnecterConnect);
	}
	_NET_CATCH
	{
		step += 10000;
		goto EXCEPTION;
	}

	WriteLog(KERN_INFO
			"ServerConnectorManager::ConnectToServer(): Success ! sock=%d,pid=%d,ip=%s",
			pConnector->GetSocket()->getSOCKET(),
			pConnector->GetConnectorID(),
			pConnector->GetSocket()->getIP()
			);

	return pConnector;

EXCEPTION:
	WriteLog(KERN_ERR
			"ClientConnectorManager::ConnectToServer(): Fail ! IP:%s Port:%d,Step:%d",
			pConnector->GetSocket()->getSOCKET(),
			pConnector->GetConnectorID(),
			pConnector->GetSocket()->getIP()
			);

	if( pConnector != NULL )
	{
		if( bRemove )
			RemoveConnector(pConnector);
		else
			m_pConnectorPool->DelConnector(pConnector->GetConnectorID());
	}

	return NULL;
}
void BHSequenceObject::_BuildConnectors()
{
	IBHCanvasObject::_BuildConnectors();
	AddConnector(new BHConnector(BHConnector::EOutput));

}