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();
}