public ServiceResult AddReference(
NodeId sourceId,
NodeId referenceTypeId,
bool isInverse,
NodeId targetId,
bool bidirectional)
{
try
{
m_lock.Enter();
// find source.
ILocalNode source = GetManagerHandle(sourceId) as ILocalNode;
if (source == null)
{
return StatusCodes.BadParentNodeIdInvalid;
}
// add reference from target to source.
if (bidirectional)
{
// find target.
ILocalNode target = GetManagerHandle(targetId) as ILocalNode;
if (target == null)
{
return StatusCodes.BadNodeIdUnknown;
}
// ensure the reference is valid.
ValidateReference(source, referenceTypeId, isInverse, target.NodeClass);
// add reference from target to source.
AddReferenceToLocalNode(target, referenceTypeId, !isInverse, sourceId, false);
}
// add reference from source to target.
AddReferenceToLocalNode(source, referenceTypeId, isInverse, targetId, false);
return null;
}
finally
{
m_lock.Exit();
}
}
/// <summary>