in src/CRA.ClientLibrary/Main/CRAWorker.cs [1175:1235]
private bool TryFusedConnect(
string otherInstance,
string fromVertexName,
string fromVertexOutput,
string toVertexName,
string toVertexInput)
{
if (otherInstance != InstanceName)
return false;
CancellationTokenSource source = new CancellationTokenSource();
if (_localVertexTable.ContainsKey(fromVertexName) &&
_localVertexTable[fromVertexName].OutputEndpoints.ContainsKey(fromVertexOutput) &&
_localVertexTable.ContainsKey(toVertexName) &&
_localVertexTable[toVertexName].InputEndpoints.ContainsKey(toVertexInput))
{
var fromVertex = _localVertexTable[fromVertexName].OutputEndpoints[fromVertexOutput] as IFusableVertexOutputEndpoint;
var toVertex = _localVertexTable[toVertexName].InputEndpoints[toVertexInput] as IVertexInputEndpoint;
if (fromVertex != null && toVertex != null && fromVertex.CanFuseWith(toVertex, toVertexName, toVertexInput))
{
if (outConnections.TryAdd(fromVertexName + ":" + fromVertexOutput + ":" + toVertexName + ":" + toVertexInput, source))
{
Task.Run(() => EgressToVertexInput(fromVertexName, fromVertexOutput, toVertexName, toVertexInput, source));
return true;
}
else
return false;
}
else
return false;
}
else if (_localVertexTable.ContainsKey(fromVertexName) &&
_localVertexTable[fromVertexName].AsyncOutputEndpoints.ContainsKey(fromVertexOutput) &&
_localVertexTable.ContainsKey(toVertexName) &&
_localVertexTable[toVertexName].AsyncInputEndpoints.ContainsKey(toVertexInput))
{
var fromVertex = _localVertexTable[fromVertexName].AsyncOutputEndpoints[fromVertexOutput] as IAsyncFusableVertexOutputEndpoint;
var toVertex = _localVertexTable[toVertexName].AsyncInputEndpoints[toVertexInput] as IAsyncVertexInputEndpoint;
if (fromVertex != null && toVertex != null && fromVertex.CanFuseWith(toVertex, toVertexName, toVertexInput))
{
if (outConnections.TryAdd(fromVertexName + ":" + fromVertexOutput + ":" + toVertexName + ":" + toVertexInput, source))
{
Task.Run(() => EgressToVertexInput(fromVertexName, fromVertexOutput, toVertexName, toVertexInput, source));
return true;
}
else
return false;
}
else
{
return false;
}
}
else
{
return false;
}
}