private void ApplyFieldSet([NotNull] CirceControllerSessionManager sessionManager, VisualizeFieldSet fieldSet)
 {
     // Due to limited size of hardware buffers, we currently send the operation for each device individually.
     foreach (WirelessNetworkAddress display in displaysInRunComposition)
     {
         Task task = sessionManager.VisualizeAsync(new[] { display }, fieldSet);
         task.ContinueWith(t =>
         {
             if (t.IsFaulted)
             {
                 Log.Warn($"Failed to send display update operation from controller: {fieldSet}.", t.Exception);
             }
         });
     }
 }
        public Task VisualizeAsync([NotNull] [ItemNotNull] IEnumerable<WirelessNetworkAddress> destinationAddresses,
            VisualizeFieldSet fieldSet, CancellationToken cancellationToken = default(CancellationToken))
        {
            var operation = new VisualizeOperation(destinationAddresses)
            {
                CurrentCompetitorNumber = fieldSet.CurrentCompetitorNumber,
                NextCompetitorNumber = fieldSet.NextCompetitorNumber,
                StartTimer = fieldSet.StartPrimaryTimer,
                PrimaryTimerValue = fieldSet.PrimaryTimerValue,
                SecondaryTimerValue = fieldSet.SecondaryTimerValue,
                FaultCount = fieldSet.CurrentFaultCount,
                RefusalCount = fieldSet.CurrentRefusalCount,
                Eliminated = fieldSet.CurrentIsEliminated,
                PreviousPlacement = fieldSet.PreviousPlacement
            };

            return sessionGuard.SendAsync(operation, cancellationToken);
        }