コード例 #1
0
ファイル: RingUpdater.cs プロジェクト: heinzsack/DEV
		private StatisticalBalancer<MMUnit> GetBalancer(Guid slotId)
			{
			StatisticalBalancer<MMUnit> balancer;
			if (BalancerPerBalancerId.TryGetValue(slotId, out balancer))
				return balancer;


			var scheduledPageGroups = CurrentRingMetaData.ScheduledPageGroups
				.Where(x => x.StartTime.TimeOfDay < CurrentReferenceTime.TimeOfDay)
				.Where(x => x.SlotId == slotId);

			Dictionary<PageGroup, int> occurances = new Dictionary<PageGroup, int>();
			foreach (ScheduledPageGroup scheduledPageGroup in scheduledPageGroups)
				{
				int occurance = 0;
				if (!occurances.TryGetValue(scheduledPageGroup.PageGroup, out occurance))
					{
					occurances.Add(scheduledPageGroup.PageGroup, 0);
					occurance = 0;
					}
				occurances[scheduledPageGroup.PageGroup] = occurance + 1;
				}


			balancer = new StatisticalBalancer<MMUnit>();
			BalancerPerBalancerId.Add(slotId, balancer);


			foreach (var occurance in occurances)
				{
				MMUnit mmUnit = MultimediaDb.MMUnits.Find(occurance.Key.Id);
				balancer.Add(mmUnit, TimeSpan.FromSeconds(mmUnit.PlayingDurationSum), 1, occurance.Value);
				}

			StoreBalancerToDatabase(balancer);
			return balancer;
			}
コード例 #2
0
ファイル: BalancerUsage.cs プロジェクト: heinzsack/DEV
		void ActualizeBalancers(StatisticalBalancer<MMUnit> balancer,
			MMUnit[] involvedMMUnitsShouldBeInBalancer)
			{
			foreach (MMUnit mmUnit in involvedMMUnitsShouldBeInBalancer)
				{
				if (balancer.Entries.ContainsKey(mmUnit))
					continue;
				int importance = 1;
				balancer.Add(mmUnit, TimeSpan.FromSeconds(mmUnit.PlayingDurationSum), importance);
				}
			foreach (MMUnit entriesKey in balancer.Entries.Keys)
				{
				if (involvedMMUnitsShouldBeInBalancer.Contains(entriesKey))
					continue;
				balancer.Remove(entriesKey);
				}
			}
コード例 #3
0
ファイル: RingUpdater.cs プロジェクト: heinzsack/DEV
		private void LoadStoredBalancers()
			{
			//Letzter Stand der Balancers für jeden Block
			IGrouping<Guid, LastGeneratedBalancerState>[] balancerStatesForBlockSlots 
				= Player.LastGeneratedBalancerStates
					.GroupBy(x => (Guid)x.SlotId).ToArray();

			foreach (IGrouping<Guid, LastGeneratedBalancerState> balancerStatesForBlockSlot in balancerStatesForBlockSlots)
				{
				Guid currentBlockSlotId = balancerStatesForBlockSlot.Key;


				//Ein Balancer für jeden BlockSlot
				StatisticalBalancer<MMUnit> balancerForBlockToSlot = new StatisticalBalancer<MMUnit>();
				balancerForBlockToSlot.Tag = currentBlockSlotId;
				BalancerPerBalancerId.Add(currentBlockSlotId, balancerForBlockToSlot);


				//Befüllen des Balancers mit dem Stand der letzten generierung
				foreach (LastGeneratedBalancerState balancerEntry in balancerStatesForBlockSlot)
					{
					MMUnit mmUnitToAdd = MultimediaDb.MMUnits.Find(balancerEntry.PageGroupId);
					int importance = 1;
					var useCount = (int)Math.Round(balancerForBlockToSlot.AverageWeightedCount * importance * (decimal)balancerEntry.PercentageToAverageLine, 0);

					balancerForBlockToSlot.Add(mmUnitToAdd, TimeSpan.FromSeconds(mmUnitToAdd.PlayingDurationSum), importance, useCount);
					}
				}
			}
コード例 #4
0
ファイル: GumslModell.cs プロジェクト: heinzsack/DEV
		public void TestStatisticalBalancer()
			{
			StatisticalBalancer<String> balancer = new StatisticalBalancer<string>();
			int Wertigkeit = 0;
			foreach (string s in TestDaten.Keys)
				{
				balancer.Add(s, TimeSpan.FromSeconds(20), (Wertigkeit%10)+1, 0);
				Wertigkeit++;
				}
			int counter = 0;
			while (counter < 10000)
				{
				String Result = balancer.GetNextItem(TimeSpan.FromSeconds(20));
				TestDaten[Result]++;
				counter++;
				if ((counter % 100) == 1)
					DisplayResult(counter);
				}
			DisplayResult(counter);


			}