/// <summary>
/// forceBuggyRemove is not used here since this client is not lockable.
/// </summary>
void IActivityMonitorBoundClient.SetMonitor(Impl.IActivityMonitorImpl source, bool forceBuggyRemove)
{
if (source != null && _source != null)
{
throw ActivityMonitorClient.CreateMultipleRegisterOnBoundClientException(this);
}
if (_source != null)
{
_bridgeTarget.RemoveCallback(this);
// Unregistering.
for (int i = 0; i < _openedGroups.Count; ++i)
{
if (_openedGroups[i])
{
_targetMonitor.CloseGroup(new ActivityLogGroupConclusion(ActivityMonitorResources.ClosedByBridgeRemoved, TagBridgePrematureClose));
}
}
_openedGroups.Clear();
}
else
{
_bridgeTarget.AddCallback(this);
_targetActualFilter = _bridgeTarget.TargetFinalFilter;
if (_pullTargetTopicAndAutoTagsFromTarget)
{
source.InitializeTopicAndAutoTags(this._targetMonitor.Topic, _targetMonitor.AutoTags);
}
}
_source = source;
Interlocked.MemoryBarrier();
}