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(); } }
//[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); } }
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"; }
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(); //} }
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; }
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); } }
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); } }
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())); }
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); }
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; }