예제 #1
0
		private void MakeBannerServerCall(Identity id, Banner.Positions position)
		{
		
			Server server = new Server();
			
			BannerDataHolder bdh = server.GetBanner(position, false, id, new Bobs.BannerServer.Rules.RequestRules());
			if (bdh != null)
			{
				LogBannerHit(id, bdh);
			}
			else
			{
				Timeslots.GetCurrentTimeslot().TotalNotShown().Increment();
			}
		}
예제 #2
0
		//[Test]
		public void BannersAreServed()
		{
			Caching.Instances.Main.FlushAll();
			Caching.Instances.LocalCache.FlushAll();

			using (new Context<bool>(() => Common.Settings.SpreadBannerHits, (b) => Common.Settings.SpreadBannerHits = b, false))
			{
				int numberOfHitsPerTimeslot = 5;
				UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner");
				Banner b = AddValidBanner(numberOfHitsPerTimeslot);
				Server server = new Server();
				BannerDataHolder bdh = server.GetBanner(b.Position, false, new BrowserGuidIdentity(Guid.NewGuid()), new Bobs.BannerServer.Rules.RequestRules());
				Assert.IsNotNull(bdh);
			}
		}
예제 #3
0
		string GetFullBody()
		{
			if (TemplateType.Equals(TemplateTypes.SpecialMail))
			{
				string body = "";

				Assembly ass = Assembly.GetExecutingAssembly();
				StreamReader sr = new StreamReader(ass.GetManifestResourceStream("Bobs.Emails.DsiEmailTemplateSpecial.htm"));
				string siteUserTemplate = sr.ReadToEnd();

				string logInUrl = "http://" + Vars.DomainName + "/";
				if (UsrRecipient != null)
				{
					logInUrl = UsrRecipient.LoginUrl;
				}
				if (RedirectUrl.Length > 0 && UsrRecipient != null)
				{
					logInUrl = UsrRecipient.LoginAndTransfer(RedirectUrl);
				}
				if (OverrideLoginLink.Length > 0)
				{
					logInUrl = OverrideLoginLink;
				}
				body = siteUserTemplate.Replace("[SUBJECT]", Subject);
				body = body.Replace("[BODY]", Body);
				body = body.Replace("[LOGIN]", logInUrl);

				body = AolCompliance(body);
				body = GenericReplacements(body);
				return body;
			}
			else if (TemplateType.Equals(TemplateTypes.AnotherSiteUser))
			{
				string body = "";

				Assembly ass = Assembly.GetExecutingAssembly();
				StreamReader sr = new StreamReader(ass.GetManifestResourceStream("Bobs.Emails.DsiEmailTemplateSiteUser.htm"));
				string siteUserTemplate = sr.ReadToEnd();
				
				RelevanceHolder rel = new RelevanceHolder();
				UsrRecipient.AddRelevant(rel);

				BannerServer.Rules.RequestRules rules = new Bobs.BannerServer.Rules.RequestRules();

				foreach (int musicTypeK in rel.RelevantMusic)
				{
					rules.MusicTypes.Add(musicTypeK);
				}
				foreach (int placeK in rel.RelevantPlaces)
				{
					rules.PlacesVisited.Add(placeK);
				}
				Bobs.BannerServer.Server server = new Bobs.BannerServer.Server();
				BannerDataHolder bdh = server.GetBanner(Banner.Positions.EmailBanner, false, new UsrIdentity(UsrRecipient), rules);
				//Banner b = null;
				string bannerHtml = "";
				if (bdh != null)
				{
					Banner b = new Banner(bdh.K);
					bannerHtml = @"<table cellpadding=""0"" cellspacing=""0"" border=""0""><tr><td rowspan=""3""><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""23"" height=""90""></td><td rowspan=""3""><a href=""[LOGIN]""><img src=""[WEB-ROOT]gfx/logo-200-90.jpg"" border=""0"" width=""200"" height=""90""></a></td><td rowspan=""3""><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""23"" height=""90""></td><td><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""331"" height=""20""></td><td rowspan=""3""><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""23"" height=""90""></td></tr><tr><td><a href=""[LOGIN(" + b.LinkUrlLive + @")]""><img src=""" + b.Misc.Url() + @""" border=""0"" width=""331"" height=""51""></a></td></tr><tr><td><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""331"" height=""19""></td></tr></table>";
					b.RegisterHit(new UsrIdentity(UsrRecipient));
				}
				else
				{
					bannerHtml = @"<table cellpadding=""0"" cellspacing=""0"" border=""0""><tr><td><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""23"" height=""90""></td><td><a href=""[LOGIN]""><img src=""[WEB-ROOT]gfx/logo-200-90.jpg"" border=""0"" width=""200"" height=""90""></a></td><td><img src=""[WEB-ROOT]gfx/1pix.gif"" width=""377"" height=""90""></td></tr></table>";
				}
			
				siteUserTemplate = siteUserTemplate.Replace("[BANNER]", bannerHtml);
			 
				
				
				
				#region AnotherSiteUser
				string salutation = "Hi, ";
				string logInUrl = "http://" + Vars.DomainName + "/";
				if (UsrRecipient != null)
				{
					if (UsrRecipient.NickName.Length > 0)
						salutation = "Dear " + HttpUtility.HtmlEncode(UsrRecipient.NickName) + ", ";
					logInUrl = UsrRecipient.LoginUrl;
				}
				if (RedirectUrl.Length > 0 && UsrRecipient != null)
				{
					logInUrl = UsrRecipient.LoginAndTransfer(RedirectUrl);
				}
				if (OverrideLoginLink.Length > 0)
				{
					logInUrl = OverrideLoginLink;
				}
				body = siteUserTemplate.Replace("[SUBJECT]", Subject);
				#region [QUICKLINK]
				if (ShowQuickLink)
				{
					body = body.Replace("[QUICKLINK]", @"[h1]
		Quick link
	[/h1]
	[div]
		<p align=""center"" style=""margin:8px 0px 4px 0px;""><a href=""[LOGIN]"" style=""font-size:18px;font-weight:bold;"">Click here for DontStayIn</a></p>
	[/div]");
				}
				else
					body = body.Replace("[QUICKLINK]", "");
				#endregion
				body = body.Replace("[BODY]", Body);
				body = body.Replace("[SALUTATION]", salutation);
				#endregion

				body = AolCompliance(body);
				body = body.Replace("[LOGIN]", logInUrl);
				body = GenericReplacements(body);
				return body;
			}
			else if (TemplateType.Equals(TemplateTypes.AdminNote))
			{
				Assembly ass = Assembly.GetExecutingAssembly();
				StreamReader sr = new StreamReader(ass.GetManifestResourceStream("Bobs.Emails.DsiEmailTemplateAdminNote.htm"));
				string adminNoteTemplate = sr.ReadToEnd();

				#region AdminNote
				string logInUrl = "http://" + Vars.DomainName + "/";
				if (Usr.Current != null)
				{
					logInUrl = Usr.Current.LoginAndTransfer(RedirectUrl);
				}
				if (OverrideLoginLink.Length > 0)
					logInUrl = OverrideLoginLink;

				Usr usrDave = new Usr(4);
				Usr usrJohn = new Usr(1);
				Usr usrTim = new Usr(2);

				string body = adminNoteTemplate.Replace("[SUBJECT]", Subject);

				body = body.Replace("[BODY]", Body);
				body = body.Replace("[LOGIN-URL-CURRENT]", logInUrl);
				body = body.Replace("[LOGIN-URL-DAVE]", usrDave.LoginAndTransfer(RedirectUrl));
				body = body.Replace("[LOGIN-URL-JOHN]", usrJohn.LoginAndTransfer(RedirectUrl));
				body = body.Replace("[LOGIN-URL-TIM]", usrTim.LoginAndTransfer(RedirectUrl));

				body = GenericReplacements(body);

				return body;
				#endregion
			}
			else
				return "error";
		}
예제 #4
0
		void GetBannerFromBannerServer()
		{
			Bobs.BannerServer.Server server = new Bobs.BannerServer.Server();
			BannerDataHolder banner = server.GetBanner(Position, Vars.UrlScheme.Equals("https"), identity, ((Master.DsiPage)Page).BannerRequestRules);
			if (banner != null)
			{
				BannerServerBanner = new Banner(banner.K);
			}

			//if ((mainThread.ThreadState & System.Threading.ThreadState.WaitSleepJoin) == System.Threading.ThreadState.WaitSleepJoin)
			//{
			//    mainThread.Interrupt();
			//}
		}
예제 #5
0
		public BannerRenderInfo GetBanner(int positionAsInt, string relevantPlacesCsv, string relevantMusicTypesCsv)
		{
			var position = (Banner.Positions) positionAsInt;
			var rules = new RequestRules();
			if (relevantMusicTypesCsv.Length > 0)
			{
				foreach (var i in relevantMusicTypesCsv.Split(',').Select(s => int.Parse(s)))
				{
					rules.MusicTypes.Add(i);
				}
			}
			if (relevantPlacesCsv.Length > 0)
			{
				foreach (var i in relevantPlacesCsv.Split(',').Select(s => int.Parse(s)))
				{
					rules.PlacesVisited.Add(i);
				}
			}

			var server = new Bobs.BannerServer.Server();
			BannerDataHolder bdh = server.GetBanner(position, false, Identity.Current, rules);
			for (int i = 0; i < 5 && bdh == null; i++)
			{
				bdh = server.GetBanner(position, false, Identity.Current, rules);

			}
			BannerRenderInfo bannerRenderInfo = null;
			if (bdh != null)
			{
				
				switch (bdh.Banner.DisplayType)
				{
					case Banner.DisplayTypes.AnimatedGif:
					case Banner.DisplayTypes.AutoEventBanner:
					case Banner.DisplayTypes.CustomAutoEventBanner:
					case Banner.DisplayTypes.Jpg:
						Page pageHolder = new Page();
						var genericBanner = (GenericBanner) pageHolder.LoadControl("/Controls/Banners/GenericBanner.ascx");
						pageHolder.Controls.Add(genericBanner);

						//bControl.ClickHelperLeftOffset = ClickHelperLeftOffset;
						//bControl.ClickHelperTopOffset = ClickHelperTopOffset;
						//bControl.ShowClickHelper = ShowClickHelper;
						genericBanner.CurrentBanner = bdh.Banner;
						genericBanner.Bind();
						
						StringBuilder stringBuilder = new StringBuilder();
						using (var stringWriter = new StringWriter(stringBuilder))
						{
							HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
							
							HttpContext.Current.Server.Execute(pageHolder, stringWriter, false);

						}
						bannerRenderInfo = new BannerRenderInfo()
						{
							bannerRenderInfoType = BannerRenderInfoType.Html,
							html = stringBuilder.ToString()
						};
						
						break;
					case Banner.DisplayTypes.FlashMovie:
					{
						bannerRenderInfo = new BannerRenderInfo()
						{
							bannerRenderInfoType = BannerRenderInfoType.Flash,
							flashUrl = bdh.Banner.Misc.Url(),
							flashVersion = string.IsNullOrEmpty(bdh.Banner.Misc.RequiredFlashVersion) ? "7" : bdh.Banner.Misc.RequiredFlashVersion,
							targetTag = bdh.Banner.InternalLink ? "_self" : "_blank",
							linkTag = bdh.Banner.LinkUrlLive.StartsWith("http://") ? bdh.Banner.LinkUrlLive : "http://" + Vars.DomainName + bdh.Banner.LinkUrlLive,
							miscNeedsClickHelper = !bdh.Banner.Misc.BannerLinkTag
						};
						break;
					}
					case Banner.DisplayTypes.CustomHtml:
					default:
						break;

				}
				if (bannerRenderInfo != null)
				{
					bannerRenderInfo.k = bdh.Banner.K;
					bannerRenderInfo.height = bdh.Banner.Height;
					bannerRenderInfo.width = bdh.Banner.Width;
					bannerRenderInfo.duration = (bdh.Banner.DisplayDuration ?? Common.Settings.DefaultBannerDurationInSeconds)*1000;
					Log.Items itemRotation;
					Log.Items itemHit;
					switch(position)
					{
						case Banner.Positions.Hotbox:
							itemRotation = Log.Items.HotboxRotation;
							itemHit = Log.Items.HotBoxHit;
							break;
						case Banner.Positions.Leaderboard:
							itemRotation = Log.Items.LeaderboardRotation;
							itemHit = Log.Items.LeaderboardHit; break;
						case Banner.Positions.Skyscraper:
							itemRotation = Log.Items.SkyScraperRotation;
							itemHit = Log.Items.SkyScraperHit; break;
						case Banner.Positions.PhotoBanner:
							itemRotation = Log.Items.PhotoBannerRotation;
							itemHit = Log.Items.PhotoBannerHit; break;
						default:
							throw new NotImplementedException();
					}
					Log.Increment(itemRotation);
					Log.Increment(itemHit);
					bdh.Banner.RegisterHit();
				}
			}
			
			return bannerRenderInfo;
		}
예제 #6
0
		public void BannersAreServedAndCappedOnceTheyHaveReachedTheLimitForTheirTimeslot()
		{
			Caching.Instances.Main.FlushAll();
			Caching.Instances.LocalCache.FlushAll();

			using (new Context<Clock>(() => Time.Clock, (c) => Time.Clock = c, new ShiftedClock(Time.Today)))
			using (new Context<bool>(() => Common.Settings.SpreadBannerHits, (b) => Common.Settings.SpreadBannerHits = b, false))
			using (new Context<TrafficShape>(() => Static.TrafficShape, (t) => Static.TrafficShape = t, new ConstantTrafficShape()))
			{
				int numberOfHitsPerTimeslot = 5;
				UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner");
				Banner b = AddValidBanner(numberOfHitsPerTimeslot);
				Server server = new Server();
				int counter = 0;
				BannerDataHolder bdh = null;
				while (true)
				{
					Identity id = new BrowserGuidIdentity(Guid.NewGuid());
					bdh = server.GetBanner(b.Position, false, id, new Bobs.BannerServer.Rules.RequestRules());
					if (bdh == null) { break; }
					Banner banner = new Banner(bdh.K);
					banner.RegisterHit(id);
					counter++;
				}
				Assert.AreEqual((int)Math.Ceiling(numberOfHitsPerTimeslot * Server.ServiceMultiplier), counter);
			}
		}
예제 #7
0
		public void TestVariousPrioritiedBannersAreServedInOrderOfPriority()
		{
			Caching.Instances.Main.FlushAll();
			Caching.Instances.LocalCache.FlushAll();

			using (new Context<double>(() => Server.ServiceMultiplier, d => Server.ServiceMultiplier = d, 1.0))
			using (new Context<Clock>(() => Time.Clock, (c) => Time.Clock = c, new ShiftedClock(Time.Today)))
			using (new Context<TrafficShape>(() => Static.TrafficShape, (t) => Static.TrafficShape = t, new ConstantTrafficShape()))
			{
				int numberOfHitsPerTimeslot = 1;
				UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "delete from banner");

				Banner.Positions pos = Banner.Positions.None;

				5.Times(i => AddValidBanner(numberOfHitsPerTimeslot, i));
				5.Times(i =>
				{
					Banner b = AddValidBanner(numberOfHitsPerTimeslot, i);
					b.AlwaysShow = true;
					b.FrequencyCapPerIdentifierPerDay = 1;
					b.Update();
					if (pos == Banner.Positions.None) pos = b.Position;
				});

				BrowserGuidIdentity id = new BrowserGuidIdentity(Guid.NewGuid());
				Server server = new Server();
				int repetitons = 10;
				int previousPriorityScore = int.MaxValue;
				int previousK = int.MaxValue;
				for (int i = 0; i < repetitons; i++)
				{
					BannerDataHolder bdh = server.GetBanner(pos, false, id, new Bobs.BannerServer.Rules.RequestRules());
					bdh.Banner.RegisterHit(id);
					int priorityScore = bdh.Priority * 2 + ((bdh.AlwaysShow) ? 1 : 0);
					Assert.IsTrue(previousPriorityScore > priorityScore || previousK == bdh.K);
					previousPriorityScore = priorityScore;
					previousK = bdh.K;
				}
				Assert.AreEqual(0, previousPriorityScore);
			}
		}
예제 #8
0
		public void AlwaysShowWithFrequencyCap()
		{
			int numberOfHitsPerTimeslot = 5;
			UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner");

			Banner b = AddValidBanner(numberOfHitsPerTimeslot);
			b.AlwaysShow = true;
			b.FrequencyCapPerIdentifierPerDay = 1;
			b.Update();

			Server server = new Server();
			BrowserGuidIdentity id = new BrowserGuidIdentity(Guid.NewGuid());
			server.GetBanner(b.Position, false, id, new Bobs.BannerServer.Rules.RequestRules()).Banner.RegisterHit(id);

			Assert.IsNull(server.GetBanner(b.Position, false, id, new Bobs.BannerServer.Rules.RequestRules()));
		}
예제 #9
0
		public void AlwaysShowWithTwoBannersSplitsHitsBetweenThem()
		{
			int numberOfHitsPerTimeslot = 5;
			UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner");

			Banner b0 = AddValidBanner(numberOfHitsPerTimeslot);
			b0.AlwaysShow = true;
			b0.Update();

			Banner b1 = AddValidBanner(numberOfHitsPerTimeslot);
			b1.AlwaysShow = true;
			b1.Update();

			15.Times(() => AddValidBanner(numberOfHitsPerTimeslot));

			Server server = new Server();
			List<int> Ks = new List<int>();
			int repetitons = 50;
			for (int i = 0; i < repetitons; i++)
			{
				BannerDataHolder bdh = server.GetBanner(b0.Position, false, new BrowserGuidIdentity(Guid.NewGuid()), new Bobs.BannerServer.Rules.RequestRules());
				Ks.Add(bdh.K);
			}
			Ks.ForEach(k => Assert.IsTrue(k == b0.K || k == b1.K, "One of the non always show banners was shown :("));
			Assert.AreEqual(Convert.ToDouble(Ks.FindAll(k => k == b0.K).Count), Convert.ToDouble(Ks.FindAll(k => k == b1.K).Count), repetitons * 0.4d);
		}
예제 #10
0
		private static bool AlwaysShow(bool alwaysShow)
		{
			int numberOfHitsPerTimeslot = 5;
			UnitTestUtilities.Sql.SqlHelper.Execute(Common.Properties.ConnectionString, "DELETE FROM Banner");

			Banner b = AddValidBanner(numberOfHitsPerTimeslot);
			b.AlwaysShow = alwaysShow;
			b.Update();

			15.Times(() => AddValidBanner(numberOfHitsPerTimeslot));

			Server server = new Server();

			bool allBannersServedWereB = true;
			for (int i = 0; i < 5; i++)
			{
				BannerDataHolder bdh = server.GetBanner(b.Position, false, new BrowserGuidIdentity(Guid.NewGuid()), new Bobs.BannerServer.Rules.RequestRules());
				if (bdh.K != b.K)
				{
					allBannersServedWereB = false;
				}
			}
			return allBannersServedWereB == alwaysShow;
		}