public VisualizationUpdateCollector([NotNull] ICompetitionRunVisualizer source)
 {
     Guard.NotNull(source, nameof(source));
     this.source = source;
 }
        public CompetitionClassController([NotNull] Func<NetworkHealthReport> healthNeededCallback,
            [NotNull] ClockSynchronizationMonitor clockSynchronizationMonitor,
            [NotNull] ICompetitionRunVisualizer runVisualizer)
        {
            Guard.NotNull(healthNeededCallback, nameof(healthNeededCallback));
            Guard.NotNull(clockSynchronizationMonitor, nameof(clockSynchronizationMonitor));
            Guard.NotNull(runVisualizer, nameof(runVisualizer));

            networkHealthNeededCallback = healthNeededCallback;
            synchronizationMonitor = clockSynchronizationMonitor;
            visualizer = runVisualizer;

            clockSynchronizationMonitor.SyncRecommended += ClockSynchronizationMonitorOnSyncRecommended;
            clockSynchronizationMonitor.SyncRequired += ClockSynchronizationMonitorOnSyncRequired;
            clockSynchronizationMonitor.SyncCompleted += ClockSynchronizationMonitorOnSyncCompleted;

            runData.EliminationTracker.EliminationChanged += EliminationTrackerOnEliminationChanged;
            runData.EliminationTracker.RefusalCountChanged += EliminationTrackerOnRefusalCountChanged;

            modelSnapshot = CacheManager.DefaultInstance.ActiveModel;
        }