/// <summary> /// Registriert eine neue Entschlüsselungsregel. /// </summary> /// <param name="group">Die neue Regel.</param> /// <param name="inherited">Alle Zähler höherer Ebene.</param> private void RegisterDecryption(DecryptionGroup group, HashSet <Guid> inherited) { // Create the new counter var counter = RegisterDecryption(group.MaximumParallelSources); // Remember inherited.Add(counter); // Process all resources if (group.ScheduleResources != null) { foreach (var resource in group.ScheduleResources.Select(r => Resources.FirstOrDefault(p => ReferenceEquals(p.Resource, r)))) { if (resource != null) { resource.DecryptionCounters.UnionWith(inherited); } } } // Forward if (group.DecryptionGroups != null) { foreach (var subGroup in group.DecryptionGroups) { RegisterDecryption(subGroup, inherited); } } // Reset inherited.Remove(counter); }
/// <summary> /// Meldet komplete Entschlüsselungsregeln an. /// </summary> /// <param name="group">Eine neue Regel.</param> /// <exception cref="ArgumentNullException">Die Regel ist ungültig.</exception> public void Add(DecryptionGroup group) { // Check group.Validate(); // Remember m_Decryption.Add(group); }
/// <summary> /// Meldet komplete Entschlüsselungsregeln an. /// </summary> /// <param name="group">Eine neue Regel.</param> /// <exception cref="ArgumentNullException">Die Regel ist ungültig.</exception> public void Add(DecryptionGroup group) { // Not allowed if (m_CurrentPlan != null) { throw new NotSupportedException("Add"); } // Forward m_Resources.Add(group); }
public void Decryption_Group_May_Allow_Using_Two_Resources_At_The_Same_Time() { // Create recordings var plan1 = RecordingDefinition.Create( false, "test", Guid.NewGuid(), null, SourceMock.Source1Group1Pay, TimeBias.AddHours( 1 ), TimeSpan.FromMinutes( 100 ) ); var plan2 = RecordingDefinition.Create( false, "test", Guid.NewGuid(), null, SourceMock.Source4Group1Pay, TimeBias.AddHours( 2 ), TimeSpan.FromMinutes( 100 ) ); // Create group var group = new DecryptionGroup { ScheduleResources = new[] { PayTVDevice1, PayTVDevice2 }, MaximumParallelSources = 2, }; // Create component under test var cut = new RecordingScheduler( StringComparer.InvariantCultureIgnoreCase ) { PayTVDevice1, PayTVDevice2, plan1, plan2, group }; // Process var schedules = cut.GetSchedules( TimeBias ).ToArray(); // Validate Assert.AreEqual( 2, schedules.Length, "Schedules" ); Assert.IsFalse( schedules[0].StartsLate, "Late 1" ); Assert.IsFalse( schedules[1].StartsLate, "Late 2" ); }
/// <summary> /// Meldet komplete Entschlüsselungsregeln an. /// </summary> /// <param name="group">Eine neue Regel.</param> /// <exception cref="ArgumentNullException">Die Regel ist ungültig.</exception> public void Add( DecryptionGroup group ) { // Not allowed if (m_CurrentPlan != null) throw new NotSupportedException( "Add" ); // Forward m_Resources.Add( group ); }
/// <summary> /// Meldet komplete Entschlüsselungsregeln an. /// </summary> /// <param name="group">Eine neue Regel.</param> /// <exception cref="ArgumentNullException">Die Regel ist ungültig.</exception> public void Add(DecryptionGroup group) { // Forward Resources.Add(group); }