public void PropertyHash_ConcatenatesSelectedFieldsInOrder() { var hasher = new PropertyHash(); var item = new Cache.Item("url", "content", DateTime.Now); var hash = hasher.Hash(item, i => i.Url, i => i.Content); Assert.Equal("urlcontent", hash); }
public void AlgorithmPropertyHash_AppliesHashingAlgorithmToSeed() { var hasher = new AlgorithmPropertyHash("sha256"); var item = new Cache.Item("url", "content", DateTime.Now); var hash = hasher.Hash(item, i => i.Url, i => i.Content); Assert.Equal("9FyLxk+9z73XO8xhZ15emMaK+oa8aDg6LWiY6y40KyQ=", hash); }
public void Should_AlgorithmPropertyHash_AppliesHashingAlgorithToSeed() { //arrange var hasher = new AlgorithmPropertyHash("sha256"); var item = new Cache.Item("url", "content", DateTime.Now); //act var hash = hasher.Hash(item, i => i.Url, i => i.Content); //assert hash.Should().Equals("9FyLxk+9z73XO8xhZ15emMaK+oa8aDg6LWiY6y40KyQ="); }
public void Should_PropertyHash_ConcatenatesSelectedFieldsInOrder() { //arrange var hasher = new PropertyHash(); var item = new Cache.Item("url", "content", DateTime.Now); //act var hash = hasher.Hash(item, i => i.Url, i => i.Content); //assert hash.Should().Equals("urlcontent"); }
/// <summary> /// Create or retrieve an image of the DataSource, /// saves in Image property. /// May raise NewImageAvailable event. /// </summary> public void Refresh() { // must have datasource to draw if (dataSource == null) { return; } // refresh the renderinfo // and hashvalue for cache retrieval UpdateRenderInfo(dataSource); if (RenderInfo.Dimension.X > 0.0f && RenderInfo.Dimension.Y > 0.0f) { // decrease ref counts on last used cache-hit if (item != null) { item.Refs--; } // try get image from cache if (!Cache.TryGetValue(AppearanceHash, out item)) { // prepare drawing PrepareDraw(); // glowing background if marked if (drawBackground) { DrawBackground(); } // main rendering DrawSubOverlays(true); DrawMainOverlay(); DrawSubOverlays(false); // post effects DrawPostEffects(); // finish drawing FinishDraw(); // possibly add image to cache if (Cache.IsEnabled) { item = new Cache.Item(); item.Key = AppearanceHash; item.Image = image; item.Refs = 1; item.Tick = DateTime.Now.Ticks; item.Size = 4U * (uint)(RenderInfo.Dimension.X * RenderInfo.Dimension.Y); Cache.Add(AppearanceHash, item); } } else { image = item.Image; item.Refs++; item.Tick = DateTime.Now.Ticks; } // fire event RaiseNewImageAvailable(); } }
void Execute() { try { target.SearchName = name; int total = -1; for (int i = 0; i < 2; i++) { string type = i == 0 ? "exact" : "contains"; string url = "http://sc2ranks.com/api/search/" + type + "/" + region + "/" + name + ".xml" + appkey; Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream(); XmlReader reader = new XmlTextReader(stream); reader.MoveToContent(); bool hasid = false; bool hasname = false; int lastid = 0; string lastname = null; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { string key = reader.Name; reader.Read(); if (reader.NodeType == XmlNodeType.Text) { string value = reader.Value; switch (key) { case "error": target.Error = value; if (target.Error == "no_characters") target.Error = "No match for '" + name + "'"; break; case "bnet-id": hasid = int.TryParse(value, out lastid); break; case "name": lastname = value; hasname = true; break; case "total": total = int.TryParse(value, out total) ? total : -1; break; } } } if (hasname && hasid) { Cache.Item item = new Cache.Item(); item.ID = lastid; item.Name = lastname; target.Items.Add(item); hasname = false; hasid = false; } if (target.Error != null) break; } if (i == 0) { if (target.Error != null) target.Error = null; else { target.Exact = true; break; } } } if (target.Error == null && (total == -1 || total > 10)) { target.Error = "Too many hits (" + total.ToString() + ") to display, see http://sc2ranks.com/search/contains/" + region + "/" + name + " for all hits"; } if (target.Error == null) { target.Region = region; foreach (Cache.Item item in target.Items) { Cache.Details details = new Cache.Details(); details.Name = item.Name; details.Link = "http://sc2ranks.com/char/" + region + "/" + item.ID + "/" + item.Name; string url = "http://sc2ranks.com/api/base/teams/" + region + "/" + item.Name + "!" + item.ID.ToString() + ".xml" + appkey; Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream(); XmlReader reader = new XmlTextReader(stream); reader.MoveToContent(); Cache.Team team = new Cache.Team(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { string key = reader.Name; reader.Read(); if (reader.NodeType == XmlNodeType.Text) { string value = reader.Value; switch (key) { case "division-rank": int.TryParse(value, out team.Rank); break; case "wins": int.TryParse(value, out team.Wins); break; case "bracket": int.TryParse(value, out team.Bracket); break; case "league": team.League = value; break; case "is-random": bool.TryParse(value, out team.IsRandom); break; case "points": int.TryParse(value, out team.Points); break; case "losses": int.TryParse(value, out team.Losses); break; case "updated-at": DateTime.TryParse(value, out team.Refreshed); break; } } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name == "team") { details.Teams.Add(team); team = new Cache.Team(); } } } if (details.Teams.Count != 0) { details.Teams.Sort(new Comparison<Cache.Team>(CompareTeams)); target.Details.Add(details); } } } target.Ready = true; target.Write(source, bracket); } catch (Exception ex) { Cache.RemoveEntry(target); source.ReplyChannel("Rank lookup failed: sc2ranks.com is unresponsive :("); Program.Log("Rank worker thread exception: " + ex.Message); } }