Пример #1
0
bool CustomConnection::Bind(ObjectHandleT<ISlot> outputSlot, ObjectHandleT<ISlot> inputSlot)
{
	bool result = false;
	if (outputSlot == nullptr || inputSlot == nullptr)
	{
		NGT_ERROR_MSG("Input arguments are null\n");
		return result;
	}

	if (isConnected)
	{
		NGT_ERROR_MSG("Connection is already connected\n");
		return result;
	}

	while (true)
	{
		result = outputSlot->CanConnect(inputSlot);

		if (!result)
			break;

		result = inputSlot->CanConnect(outputSlot);

		if (!result)
			break;

		if (outputSlot->Connect(m_id, inputSlot) && inputSlot->Connect(m_id, outputSlot))
		{
			m_inputSlot = inputSlot.get();
			m_outputSlot = outputSlot.get();
			isConnected = true;
		}
		else
		{
			result = false;
			NGT_ERROR_MSG("Failed to connect input and output slots\n");

			outputSlot->Disconnect(m_id, inputSlot);
			inputSlot->Disconnect(m_id, outputSlot);
		}

		break;
	}

	return result;
}